![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADO-запрос в Native БД Navision 3.7 [D7, Navision]
mefodiy © (2009-05-08 09:02:00)Нужно подключиться и добавить запись в одну из таблиц 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
AndreyV (2009-05-16 22:46:00) [1]> [8] mefodiy (13.05.09 22:49)
> Parameters.ParamValues['pDate'] := EncodeDate(2008,8,
> дает ошибку: "Conversion error".
Parameters.ParamValues['pDate'].AsDate
mefodiy (2009-05-16 22:46:00) [2]Конечно, можно и так
1. ' WHERE "Дата начала"={ts ' + QuotedStr('2008-08-04 00:00:00') + '}');
2. Нет:
' WHERE "Дата начала"={d ' + QuotedStr('2008-08-04') + '}');
mefodiy (2009-05-16 22:25:00) [3]Наконец, нашел документацию:
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') + '}');
Всем спасибо!
mefodiy (2009-05-13 22:49:00) [4]>>Медвежонок Пятачок ©
Запрос:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT "Код Валюты",' +
'"Дата Начала",' +
'"Курс Валюты Сумма",' +
'"Корр_ Курс Валюты",' +
'"Связанный Код Валюты",' +
'"Связанный Курс Валюты Сумма",' +
'"Фикс_ Курс Валюты",' +
'"Связ_ Корр_ Курс Валюты"' +
' FROM "Валюта Курс"' +
' WHERE "Дата Начала"=:pDate');
Parameters.ParamValues['pDate'] := EncodeDate(2008,8,4);
Open;
end;
дает ошибку: "Conversion error".
Медвежонок Пятачок (2009-05-12 14:05:00) [5]Parameters.ParamValues['param_name'] := EncodeDate(2008,8,4)
sniknik (2009-05-12 12:42:00) [6]параметры универсальны. любой OLEDB драйвер должен их понимать.
mefodiy (2009-05-12 12:33:00) [7]>>попробуй еще сто тысяч вариантов, а когда устанешь, начни использовать параметры
В том-то и дело, что негде посмотреть насчет этих параметров...
Медвежонок Пятачок (2009-05-12 09:45:00) [8]попробуй еще сто тысяч вариантов, а когда устанешь, начни использовать параметры
mefodiy (2009-05-12 09:17:00) [9]С помощью 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]');
Ни одно из условий не работает.
mefodiy (2009-05-08 12:05:00) [10]>>первый запрос написан с ошибкой. это скопировано или писалось тут?
Запрос писался тут. Конечно, в оригинале это
SQL.Add('SELECT * FROM Vendor');
Насчет ADODataSet обязательно проверю (к сожалению, смогу только вечером).
В любом случае, спасибо.
sniknik (2009-05-08 09:29:00) [11]первый запрос написан с ошибкой. это скопировано или писалось тут?
с чего решил что есть dbo как в mssql?
уверен что для ограничители нестандартных названий квадратные скобки как в mssql, а не двойные кавычки например как в FB?
и вообще если не знаешь точно название таблицы почему не посмотреть это? например - кладешь на форму ADODataSet связываешь его с коннектом ставишь тип команды cmdTable и в коммандтекст просто выбираешь из списка нужное имя, как он его сам интерпретирует.