Конференция "Базы" » ADO-запрос в Native БД Navision 3.7 [D7, Navision]
 
  • mefodiy (08.05.09 09:02) [0]
    Нужно подключиться и добавить запись в одну из таблиц Native БД Navision 3.7 (бывает еще SQL БД).
    С помощю навижновского C/ODBC создал Data Source.
    В Delphi использую ADO. Коннект к базе производится нормально.
    При запросе:
    with ADOQuery1 do
    begin
     Close;
     SQL.Clear;
     SQL.Add('SELECT * FROM Vendor]');
     Open;
    end;
    Выдается сообщение о том, что таблица "Vendor" не существует (хотя это - "родная" навижновская таблица).
    Пробовал варианты:
    SQL.Add('SELECT * FROM [Название базы данных].[dbo].[Название фирмы$Vendor]');
    и
    SQL.Add('SELECT * FROM [Название фирмы$Vendor]');
    Опять ошибка, но на этот раз о лишнем символе в названии таблицы.
    На форуме по Navision ответ найти не удалось.
    Может из мастеров кто-нибудь встречался с такой проблемой.
    P.S.
    Параметры ODBC:
    Data Source (name): Navision
    Description: <пусто>
    Program Folder: <пусто>
    Connection: "Local" (из вариантов Local,Server)
    Server Name: <поле не активно>
    Net Type: <поле не активно>
    Database Name: MyDataBase
    Commany Name: MyCompanyName
    User ID: MyUserId
    Password: MyPassword
  • sniknik © (08.05.09 09:29) [1]
    первый запрос написан с ошибкой. это скопировано или писалось тут?

    с чего решил что есть dbo как в mssql?
    уверен что для ограничители нестандартных названий квадратные скобки как в mssql, а не двойные кавычки например как в FB?

    и вообще если не знаешь точно название таблицы почему не посмотреть это? например - кладешь на форму ADODataSet связываешь его с коннектом ставишь тип команды cmdTable и в коммандтекст просто выбираешь из списка нужное имя, как он его сам интерпретирует.
  • mefodiy (08.05.09 12:05) [2]
    >>первый запрос написан с ошибкой. это скопировано или писалось тут?
    Запрос писался тут. Конечно, в оригинале это
    SQL.Add('SELECT * FROM Vendor');
    Насчет ADODataSet обязательно проверю (к сожалению, смогу только вечером).
    В любом случае, спасибо.
  • mefodiy (12.05.09 09:17) [3]
    С помощью ADODataSet выяснилось следующее:
    1.Названия таблиц в Native БД Navision 3.7 почему-то на русском языке
    2.Если в названии таблицы или столбца есть пробел, то в запросе нужно использовать двойные кавычки.
    Запрос нормально отрабатывает.
    Сейчас возникла другая проблема: не могу найти вариант задания условия на дату. Видимо, в запросе нужно использовать какой-то специальный формат даты.
    Перепробовал варианты:
    ' WHERE "Дата Начала"=' + '08-08-04');
    ' WHERE "Дата Начала"=' + '2008-08-04');
    ' WHERE "Дата Начала"=' + '04-08-08');
    ' WHERE "Дата Начала"=' + '04-08-2008');
    ' WHERE "Дата Начала"=' + '04.08.08');
    ' WHERE "Дата Начала"=' + '04.08.2008');
    ' WHERE "Дата Начала"=' + '04_08_08');
    ' WHERE "Дата Начала"=' + '04_08_2008');
    ' WHERE "Дата Начала"=' + '04082008');
    ' WHERE "Дата Начала"=' + '040808');
    ' WHERE "Дата Начала"=' + '20080804');
    ' WHERE "Дата Начала"=' + '080804');
    ' WHERE "Дата Начала"=' + 'STR_TO_DATE('+QuotedStr(DateToStr(Now))+','+QuotedStr('%d.%m.%Y')+')');
    ' WHERE "Дата Начала"=' + 'STR_TO_DATE('+QuotedStr(DateToStr(Now))+')');
    ' WHERE "Дата Начала"=' + 'STR_TO_DATE('+QuotedStr('2008-08-04')+')');
    ' WHERE "Дата Начала"=' + '2008-08-04 00:00:00,000');
    ' WHERE "Дата Начала"=' + QuotedStr('04.08.2008'));
    ' WHERE "Дата Начала"=' + QuotedStr('2008-08-04 00:00:00,000'));
    ' WHERE "Дата Начала"=' + QuotedStr('2008-08-04 00:00:00'));
    ' WHERE "Дата Начала"=' + QuotedStr('#04.08.2008#'));
    ' WHERE "Дата Начала"=' + QuotedStr('#2008-08-04#'));
    ' WHERE "Дата Начала"=' + QuotedStr('2008-08-04'));
    ' WHERE "Дата Начала"=' + '#2008-08-04#');
    ' WHERE "Дата Начала"=' + QuotedStr('#2008-08-04 00:00:00,000#'));
    ' WHERE "Дата Начала"=' + QuotedStr('#2008-08-04 00:00:00#'));
    ' WHERE "Дата Начала"=' + '#2008-08-04 00:00:00#');
    ' WHERE "Дата Начала"=' + '#2008-08-04 00:00:00,000#');
    ' WHERE "Дата Начала"=' + 'ts 2008-08-04 00:00:00');
    ' WHERE "Дата Начала"=' + '2008-08-04 00:00:00');
    ' WHERE "Дата Начала"=' + '[ts 2008-08-04 00:00:00]');
    Ни одно из условий не работает.
  • Медвежонок Пятачок © (12.05.09 09:45) [4]
    попробуй еще сто тысяч вариантов, а когда устанешь, начни использовать параметры
  • mefodiy (12.05.09 12:33) [5]
    >>попробуй еще сто тысяч вариантов, а когда устанешь, начни использовать параметры

    В том-то и дело, что негде посмотреть насчет этих параметров...
  • sniknik © (12.05.09 12:42) [6]
    параметры универсальны. любой OLEDB драйвер должен их понимать.
  • Медвежонок Пятачок © (12.05.09 14:05) [7]
    Parameters.ParamValues['param_name'] := EncodeDate(2008,8,4)
  • mefodiy (13.05.09 22:49) [8]
    >>Медвежонок Пятачок ©
    Запрос:

     with ADOQuery1 do
     begin
       Close;
       SQL.Clear;
       SQL.Add('SELECT "Код Валюты",' +
                               '"Дата Начала",' +
                               '"Курс Валюты Сумма",' +
                               '"Корр_ Курс Валюты",' +
                               '"Связанный Код Валюты",' +
                               '"Связанный Курс Валюты Сумма",' +
                               '"Фикс_ Курс Валюты",' +
                               '"Связ_ Корр_ Курс Валюты"' +
                     ' FROM "Валюта Курс"' +
                   ' WHERE "Дата Начала"=:pDate');
       Parameters.ParamValues['pDate'] := EncodeDate(2008,8,4);
       Open;
     end;

    дает ошибку: "Conversion error".
  • mefodiy (16.05.09 22:25) [9]
    Наконец, нашел документацию:
    http://www.navisionguider.dk/downloads/Man...1/w1w1nodbc.pdf,
    из которой и вытекло решение:
    Если в C/ODBC Setup-->Options-->Closing Date Support (ChekBox):
    1. Да, то условие должно быть задано как:
    ' WHERE "Дата начала"=' + '{ts ' + QuotedStr('2008-08-04 00:00:00') + '}');
    2. Нет:
    ' WHERE "Дата начала"=' + '{d ' + QuotedStr('2008-08-04') + '}');
    Всем спасибо!
  • AndreyV © (16.05.09 22:46) [10]
    > [8] mefodiy   (13.05.09 22:49)
    >   Parameters.ParamValues['pDate'] := EncodeDate(2008,8,
    > дает ошибку: "Conversion error".

    Parameters.ParamValues['pDate'].AsDate
  • mefodiy (16.05.09 22:46) [11]
    Конечно, можно и так
    1. ' WHERE "Дата начала"={ts ' + QuotedStr('2008-08-04 00:00:00') + '}');
    2. Нет:
    ' WHERE "Дата начала"={d ' + QuotedStr('2008-08-04') + '}');
 
Конференция "Базы" » ADO-запрос в Native БД Navision 3.7 [D7, Navision]
Есть новые Нет новых   [134473   +33][b:0][p:0]