-
Нужно подключиться и добавить запись в одну из таблиц 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
-
первый запрос написан с ошибкой. это скопировано или писалось тут?
с чего решил что есть dbo как в mssql? уверен что для ограничители нестандартных названий квадратные скобки как в mssql, а не двойные кавычки например как в FB?
и вообще если не знаешь точно название таблицы почему не посмотреть это? например - кладешь на форму ADODataSet связываешь его с коннектом ставишь тип команды cmdTable и в коммандтекст просто выбираешь из списка нужное имя, как он его сам интерпретирует.
-
>>первый запрос написан с ошибкой. это скопировано или писалось тут? Запрос писался тут. Конечно, в оригинале это SQL.Add('SELECT * FROM Vendor'); Насчет ADODataSet обязательно проверю (к сожалению, смогу только вечером). В любом случае, спасибо.
-
С помощью 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]'); Ни одно из условий не работает.
-
попробуй еще сто тысяч вариантов, а когда устанешь, начни использовать параметры
-
>>попробуй еще сто тысяч вариантов, а когда устанешь, начни использовать параметры
В том-то и дело, что негде посмотреть насчет этих параметров...
-
параметры универсальны. любой OLEDB драйвер должен их понимать.
-
Parameters.ParamValues['param_name'] := EncodeDate(2008,8,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".
-
Наконец, нашел документацию: 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') + '}'); Всем спасибо!
-
> [8] mefodiy (13.05.09 22:49) > Parameters.ParamValues['pDate'] := EncodeDate(2008,8, > дает ошибку: "Conversion error".
Parameters.ParamValues['pDate'].AsDate
-
Конечно, можно и так 1. ' WHERE "Дата начала"={ts ' + QuotedStr('2008-08-04 00:00:00') + '}'); 2. Нет: ' WHERE "Дата начала"={d ' + QuotedStr('2008-08-04') + '}');
|