04.05.2009, 11:21 | #1 |
Участник
|
С помощю C/ODBC создал Data Source.
В Delphi использую ADO. Коннект к базе производится нормально. Но на запрос типа "SELECT * FROM Vendor " ругается, что такой таблицы нет. Ясно, что запрос в данном случае нужно сделать как-то по-другому. Может кто встречался с такой проблемой? Заранее благодарен. |
|
04.05.2009, 11:34 | #2 |
Участник
|
Попробуйте
Код: SELECT * FROM [НазваниеФирмы$Vendor] |
|
04.05.2009, 12:04 | #3 |
Участник
|
Я когда-то так делал в SQL базе Navision и все нормально работало.
Но в данном случае SELECT * FROM [НазваниеФирмы$Vendor] тоже не работает. |
|
05.05.2009, 12:07 | #4 |
Участник
|
попробуйте так - [Название базы данных].[dbo].[Название фирмы$Vendor]
|
|
05.05.2009, 22:58 | #5 |
Участник
|
К сожалению, вариант
[Название базы данных].[dbo].[Название фирмы$Vendor] тоже не прошел. |
|
06.05.2009, 11:48 | #6 |
Участник
|
Создайте сами базу данных, создайте там таблицу и попробуйте обратится к этой базе.
Если у вас не пройдет select - то надо будет проверять настройки компонентов и ваш код. Надо бы еще посмотреть ошибку которую выдает система. |
|
06.05.2009, 21:33 | #7 |
Участник
|
Параметры ODBC и ADOConnection приведены в прикрепленных файлах:
[attachment=1004:C_ODBC.jpg] [attachment=1005:ADO_Connection.jpg] Запрос следующий: with ADOQuery1 do begin Close; SQL.Clear; SQL.Add('SELECT * FROM [Dk TEXNIKA LTD OOO$Vendor]'); Open; end; Ошибка следующая: [attachment=1006:Error.jpg] Еще раз замечу, что коннект ADO с базой устанавливается нормально. В случае SQL.Add('SELECT * FROM Vendor'); сообщение о том, что таблица не существует. |
|
08.05.2009, 20:52 | #8 |
Участник
|
С помощью ADODataSet просмотрел список таблиц базы данных.
Странная картина открылась. Большая часть названий таблиц и полей с крякозябрами. Таблицы пустые. Часть таблиц на английском языке. Есть несколько знакомых таблиц типа "Company", Material_Ledger,Material_Journal... "Company" нормально открывается. При попытке открыть другие вылетает ошибка: "Data provider or other service returned an E_FAIL status". Нет всех главных таблиц типа "G/L Entry", Vendor, Customer и т.д. Что бы это значило? |
|
09.05.2009, 15:52 | #9 |
Участник
|
Крякозябры оказались названиями нужных мне таблиц на русском языке.
Сейчас единственноя проблема - ошибка "Data provider or other service returned an E_FAIL status". |
|
11.05.2009, 21:44 | #10 |
Участник
|
Причина ошибки
"Data provider or other service returned an E_FAIL status" крылась в использовании в опциях C/ODBC регионального символа десятичных знаков. В общем, надо было убрать птичку с чекбокса "Use Regional Decimal Simbol". Пример запроса: SQL.Add('SELECT "Код Валюты",' + '"Дата Начала",' + '"Курс Валюты Сумма",' + '"Корр_ Курс Валюты",' + '"Связанный Код Валюты",' + '"Связанный Курс Валюты Сумма",' + '"Фикс_ Курс Валюты",' + '"Связ_ Корр_ Курс Валюты"' + ' FROM "Валюта Курс"'); Очередная проблема: Не могу задать условие по дате. Поскольку ничего по этому поводу не нашел, решил дествовать методом перебора. Но ни один из следующих вариантов не заработал: ' 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.2009, 11:06 | #11 |
Участник
|
' WHERE "Дата Начала"=' + '''20080804''' а так работает? Это длжно отработать как 4 авгкста 2008 года, вроде.
|
|
12.05.2009, 12:31 | #12 |
Участник
|
Проверить смогу только вечером.
Но насколько помню все, что заключено в двойные кавычки воспринимается как название таблицы, поля. |
|
12.05.2009, 21:19 | #13 |
Участник
|
>>WHERE "Дата Начала"=' + '''20080804'''
Вариант также не сработал. |
|
13.05.2009, 08:53 | #14 |
Участник
|
Попробуйте
'WHERE "Дата Начала"=' + '08/04/2008' |
|
13.05.2009, 22:09 | #15 |
Участник
|
>>'WHERE "Дата Начала"=' + '08/04/2008'
Дает ошибку: Invalid operand for operator '='; |
|
13.05.2009, 23:54 | #16 |
Administrator
|
может привести дату к integer и скормить так?
|
|
14.05.2009, 13:52 | #17 |
Участник
|
Для SQL-запроса по дате надо использовать SQL-функцию CAST
Пример: запрос полей No., Last Date Modified из таблицы Customer, если Last Date Modified = 2008-07-11 SELECT No_, [Last Date Modified] FROM [CronusDB].[dbo].[CRONUS AG$Customer] WHERE [Last Date Modified] = CAST('2008-07-11' AS DATE) У меня такой запрос срабатывает корректно. |
|
14.05.2009, 21:56 | #18 |
Участник
|
>>AlexB
Дает ошибку: Unexpected extra token: ( Вообще то, что работает для SQL базы, для Native базы не работает. |
|
15.05.2009, 19:12 | #19 |
Участник
|
|
|
15.05.2009, 20:55 | #20 |
Участник
|
|
|