Форум: "Базы";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизОшибка при запросе SELECT в ADODataSet Найти похожие ветки
← →
FunkyByte © (2006-01-24 07:53) [0]Доброго времени суток, уважаемые мастера. Пытаюсь выполнить простейший запрос на выборку в ADODataSet:
...
ADODataSet1.ConnectionString:="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\;Extended Properties=dBase IV;Persist Security Info=False";
ADODataSet1.Close;
ADODataSet1.CommandText:="SELECT MAX(Counter) as CurCounter FROM RegLog";
ADODataSet1.Open; //тут возникает ошибка...
...со следующим текстом "Непредвиденная ошибка драйвера внешней базы данных (8961)"
Пробовал подключить через ODBC:
...
ADODataSet1.ConnectionString:="Provider=MSDASQL.1;Persist Security Info=False;Data Source=Visual FoxPro Tables;Mode=ReadWrite;Initial Catalog=C:\";
ADODataSet1.Close;
ADODataSet1.CommandText:="SELECT MAX(Counter) as CurCounter FROM RegLog";
ADODataSet1.Open;
На том же месте возникает ошибка с текстом "[Microsoft][ODBC Visual FoxPro Driver]Unrecognized command verb".
В чём причина ошибки? Что не так? И как с этим бороться? Заранее благодарен.
← →
Janbolat © (2006-01-24 08:20) [1]a zachem cherez ADo mojno je ved" i BDE ispolzovat"
← →
sniknik © (2006-01-24 08:52) [2]не используй ConnectionString, используй Connection (с доп. компонентом ADOConnection) это правильнее.
по ошибке - Counter зарезервированое слово jet-а ... если нет возможности сменить имя поля то используй в кавычках [Counter]
если не поможет просмотри все значения поля (любым редактором dbf который cможет открыть), есть движки (только для dbf) которые на переполнение значения числового (при вставке/апдейте ) поля пишут в него ехпонинциальное значение (123E+15), или (другие) строковое ####. и то и другое с точки зрения jet строки в числовом поле, не распознается и необрабатывается (т.е. считай база порушена).
← →
FunkyByte © (2006-01-24 08:53) [3]Надо именно через ADO
← →
Anatoly Podgoretsky © (2006-01-24 09:14) [4]sniknik © (24.01.06 08:52) [2]
Это и есть порушеная база.
← →
Anatoly Podgoretsky © (2006-01-24 09:15) [5]FunkyByte © (24.01.06 08:53) [3]
Почему, ведь в конечном случае работа все равно идет черех БДЕ, только посредников побольше, особенно для ODBC
← →
FunkyByte © (2006-01-24 09:18) [6]2 sniknik
Попробовал взять имя поля в кавычки - ошибка никуда не делась. Попробовал сменить имя поля на rec_num - та же трабла. Соединил через ADOConnection (а вдруг поможет) - не помогло. В таблице единственная запись, и в ней это поле имеет значение 0 (поле целочисленное, Numeric в терминологии FoxPro), так что с переполнением проблем быть не должно.
← →
FunkyByte © (2006-01-24 09:23) [7]2 Anatoly Podgoretsky
Насколько я понимаю, ADO и BDE - 2 большие разницы и друг от друга вообще никак не зависят. Поправьте, если я не прав.
← →
sniknik © (2006-01-24 11:06) [8]> sniknik © (24.01.06 08:52) [2]
> Это и есть порушеная база.
те движки, что так пишут продолжают с ней работать как ни в чем не бывало, и так не считают. ;)
но вообше согласен. строка в числовом поле "Это и есть порушеная база".
> так что с переполнением проблем быть не должно.
откуда взята таблица? вот в чем смысл, например если поле определено как Numeric(3, 0) а записано значение к примеру 1000 (больше 3 символов) то "честные" движки выдадут ошибку переполнения... а есть другие "нечестные" которые ничего не выдадут а запишут "1Е3" в строке или "###" (обманут тебя фактически). сами будут после работать с ошибочными данными (округленными и 0-м вместо числа), а любой другой движок будет считать базу порушеной. о чем и спич.
> ADO и BDE - 2 большие разницы и друг от друга вообще никак не зависят.
разница конечно, но провайдеры ADO (OLEDB) вполне могут использовать BDE (что и делают)
← →
FunkyByte © (2006-01-24 14:46) [9]2 sniknik
Таблицу слепил сам. Сам же записал туда единственную запись (через Fox) для тестового прогона с 0 в вышеозначенное поле (к слову, формат поля Numeric(7,0)). Так что база не порушена. Проблема не в этом.
← →
sniknik © (2006-01-24 15:42) [10]> (через Fox)
версия? если вижуал (и вообще более менее новый) то jet не возьмет, он толи до 2,5 толи до 2,6 всерсии фокса (дос) открывает. новые форматы фокса не понимает.
тогда только Visual FoxPro Tables остается. пробуй им.
← →
FunkyByte © (2006-01-24 21:43) [11]
> если вижуал (и вообще более менее новый) то jet не возьмет
Вот сопсно и выявилась причина ошибки.
> тогда только Visual FoxPro Tables остается. пробуй им.
Пробовал. Там другая ошибка: "[Microsoft][ODBC Visual FoxPro Driver]Unrecognized command verb". Я об этом писал в самом вопросе. Там же написан ConnectionString, который я использовал. Ошибка при подключении через ODBC не зависит от имени поля и наличия ADOConnection - проверял. Что интересно, при подключении таблицы через Jet запрос INSERT работает нормально, а при подключении через ODBC не работает и он.
← →
sniknik © (2006-01-24 22:00) [12]> Unrecognized command verb
неправильная команда или опять зарезервированое слово... (чегото не распознает)
> Там же написан ConnectionString, который я использовал.
твой ConnectionString у меня не проходит (каталога базы нет, а начальный это немного не то, таблици без указания полного пути находить не будет)
попробуй этот
Provider=MSDASQL.1;Persist Security Info=False;Mode=ReadWrite;Extended Properties="DSN=Visual FoxPro Tables;UID=;SourceDB=C:\;SourceType=DBF;Exclusive=No;BackgroundFetch=No;Collate=Machine;Null=Yes;Deleted=No;"
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.014 c