Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 и в коммандтекст просто выбираешь из списка нужное имя, как он его сам интерпретирует.


Наверх

Титульная страница Поиск, карта сайта Написать письмо