Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

InterBase с помощью ADO.   Найти похожие ветки 

 
Iova   (2005-05-18 13:10) [0]

Помогите пожалуйста решить проблему.
Я подключаю базу InterBase с помощью ADO.
Строка подключения:

Provider=MSDASQL.1;Password=masterkey;Persist Security Info=True;User ID=sysdba;Mode=ReadWrite;Extended Properties="DSN=IB;Driver=Firebird/InterBase(r) driver;Dbname=C:\ENIGMA.GDB;CHARSET=NONE;PWD=DKEBFJENHFCOBHGHLAIMNAAFICELEAEGDNMFNOGALAMHBBGCHFADNKCBPPGMANOGIEKENIOPHDI PBIECPLLLCBIKEJKMJLPLIB;UID=SYSDBA";Initial Catalog=c:\

Подключается все нормально без ошибок. Но при вызове процедуры GetFieldNames(s1,form1.ListBox2.Items); происходит ошибка "провйдер не обеспечивает такой операции", однако процедура GetTableNames(form1.ListBox2.Items); вызывается нормально.
Может из-за драйвера FireBird. У меня стоит Firebird_ODBC_1.2.0.69-Win32.exe


 
Johnmen ©   (2005-05-18 13:22) [1]

Достаточно нажать F1 и разобраться с параметрами.


 
Iova   (2005-05-18 13:49) [2]

С параметрами все в порядке, т.к. эта процедура работает для БД Access.


 
sniknik ©   (2005-05-18 14:58) [3]

> Может из-за драйвера FireBird. У меня стоит Firebird_ODBC_1.2.0.69-Win32.exe
вполне возможно, получение имен полей и имен таблиц разными схемами обеспечиваются, может твой драйвер одну и не реализовал (вернее те кто его писали).

проверь с другим, благо их уже достаточно.
вот этот например, точно работает. с ним имена полей у меня получаются.  
http://zstyle.dp.ua/rus/download.htm


 
Johnmen ©   (2005-05-18 15:17) [4]

М.б. я чего-то не догоняю, но мне не понятно, как может эта процедура работать, когда вторым параметром ей указывают TStrings.


 
sniknik ©   (2005-05-18 15:22) [5]

ну а чего бы ей не работать если там TStrings и ожидается? %о))
TADOConnection.GetFieldNames(const TableName: String; List: TStrings);


 
Johnmen ©   (2005-05-18 15:31) [6]

А-а-а-а-а-а-а !!!!!
Так там и Field и Table... Не доглядел, однако :)))


 
Iova   (2005-05-18 17:28) [7]

Попробовал. Теперь он выдает ошибку: Не найдено поле RDB$FIELD_PRECISION.


 
Iova   (2005-05-18 18:58) [8]

Прикол заключается еще в том что он Выводит данные в DBGrid. Попробовал обойти эту процедуру

var n:integer;
   s1:String;
   AdoDataSet1:TAdoDataSet;
begin
 form1.ListBox2.Clear;
 n:=form1.ListBox1.ItemIndex;
 s1:=form1.ListBox1.Items.Strings[n];
 AdoDataSet1 := TAdoDataset.Create(nil);
 try
  form1.ADOConnection1.OpenSchema(siColumns, VarArrayOf([Unassigned, Unassigned, s1,Unassigned]), EmptyParam, AdoDataSet1);
 with AdoDataSet1 do begin
  while not EOF do begin
   form1.ListBox2.Items.Add(FieldByName("COLUMN_NAME").AsString);
   form4.ComboBox2.Items.Add(FieldByName("COLUMN_NAME").AsString);
   Next
  end;
 end
finally
 AdoDataSet1.Free;
end;

Всеравно не помогает, выдает ошибку: Не найдено поле RDB$FIELD_PRECISION.


 
sniknik ©   (2005-05-18 18:59) [9]

хм. не помню, было ли у меня такое... но я тестил всех провайдеров каких нашол тогда (гдето 5-6 шт) пока не остановился на ZStyle. все чемто да не устраивали (ZStyle поначалу тоже). но счас работает, и размеры типов полей определяет...
посему есть подозрение, дело не в провайдере (если конечно ZStyle поставил как советовал).
могу програмку для теста прислать, посмотриш на размеры полей. (500кб архив)


 
sniknik ©   (2005-05-18 19:00) [10]

кстати какую версию драйвера скачал?


 
Iova   (2005-05-19 09:52) [11]

>sniknik
Честно говоря я не знаю какая версия. Скачивал я с твей ссылки.
Нашел в файле Readme.txt

IB OLE DB Driver
ibole.dll
-----------------------------------------------------------------
2003 ZStyleGroup Ltd support@zstyle.dp.ua
Get latest version on: www.zstyle.dp.ua
************
PURPOSE:
OLE DB Provider to provide access to the Interbase database server.
PLATFORMS:
MS Windows 95/98/NT/2000/XP.

Кстати не подскажешь где это можно посмотреть?


 
sniknik ©   (2005-05-19 10:06) [12]

> Честно говоря я не знаю какая версия. Скачивал я с твей ссылки.
скачивал оттуда же (с сайта, конкретную ссылку не помню), работает без эксессов
 
> Кстати не подскажешь где это можно посмотреть?
что? версию? как обычно в свойствах файла (IBOLE.dll) вкладка версия... у меня показывает 5.0.11.2


 
Anatoly Podgoretsky ©   (2005-05-19 10:10) [13]

sniknik ©   (18.05.05 15:22) [5]
Оно так, но она ожидает два параметра, а не один.


 
Anatoly Podgoretsky ©   (2005-05-19 10:12) [14]

Iova   (19.05.05 09:52) [11]
И какая строка подключения?


 
Iova   (2005-05-19 10:15) [15]

У меня версия 5.0.4.5
Можешь мне прислать на ящик? Пожалуйста.


 
sniknik ©   (2005-05-19 11:17) [16]

> Оно так, но она ожидает два параметра, а не один.
во второй да но жалобы на первую ;о)), сдесь думаю описка.

> Можешь мне прислать на ящик? Пожалуйста.
могу но не буду. (против идеи форума, должно быть доступно всем заинтересованым, это что все рассылать?)
вот поискал у них и нашол откуда качал
страница
http://zstyle.dp.ua/rus/iboledb_prod.htm
ссылка
- Скачай бесплатную версию 5
(мог бы и сам)

а на ящик я тебе всетаки кину прогу, для теста. (если и в ней будет этот глюк, то значит чтото не то с самим ADO/OLE DB/...х.з. т.к. данная прога с данным провайдером у меня работает без проблем)
там на списке полей правой кнопкой мыши ткнеш увидиш типы и размеры поля, или на списке таблиц там меню, перевести в режим grid-а будеш видеть их всегда (или не покажет, если твоя ошибка проявится, т.е. она не в коде а в системе гдето... тогда туже и в ней выдаст)


 
sniknik ©   (2005-05-19 11:18) [17]

>> Оно так, но она ожидает два параметра, а не один.
> во второй да но жалобы на первую ;о)), сдесь думаю описка.
стоп! во второй процедуре это же список таблиц, там один параметр и нужен.
путаете меня только. ;о))


 
Iova   (2005-05-19 20:22) [18]

Похоже проблема в самой IB. Пробовал с помощью тестовой проги подключать. Ошибка та же самая (отсутствие выше указанного поля). А случайно нет ли разницы в какой версии IB создавалась база?


 
sniknik ©   (2005-05-19 20:36) [19]

> А случайно нет ли разницы в какой версии IB создавалась база?
х.з. базы у меня были из разных мест, по разному (наверное) созданы.
сам создавал через TIBDatabase.CreateDatabase
диалект всегда 3, 1 както сразу посчитал устарвшим и в проге проставил 3й, какие не мои... не знаю не смотрел.

не, в то, что дело в базе, чтото не верится (хочеш пришли если не очень большая, попробую открыть у себя), скорее уж дело в самом сервере IB(?), у меня файрбирд 1,5 счас. ну Yaffil еще пробовал. IB 6.5 правда тоже, но очень не долго, мог пропустить...


 
sniknik ©   (2005-05-19 20:42) [20]

хм. а может и в базе, счас посмотрел в таблице RDB$FIELDS есть поле RDB$FIELD_PRECISION (оттуда берет)

вдруг у тебя его действительно нету? выполни запросик (в той же тестовой проге)
SELECT RDB$FIELD_PRECISION FROM RDB$FIELDS


 
sniknik ©   (2005-05-19 20:57) [21]

или даже
SELECT RDB$FIELD_PRECISION
FROM RDB$FIELDS
WHERE RDB$FIELD_NAME="RDB$FIELD_PRECISION"
на всякий случай. ;о)
просто на предмет получения ошибки, если чегото не так с полем запрос не выполнится.


 
Anatoly Podgoretsky ©   (2005-05-19 22:32) [22]

Ты используешь ODBC, а они знамениты своими ограничениями, попробуй найти другой провайдер.


 
sniknik ©   (2005-05-19 23:29) [23]

Anatoly Podgoretsky
тот который я ему предложил OLE DB шный. но с ним говорит тоже не работает но по другому.


 
Iova   (2005-05-20 09:03) [24]

А не может ли кто-нибудь прислать пример базы данных (небольшой по объему), для проверки с которой небыло никаких проблем?
PS: Пробовал выполнять запрос и он говорит что такого поля он не нашел. Пробовал экспериментировать с несколькими базами + те что идут как примеры у InterBase.


 
sniknik ©   (2005-05-20 11:40) [25]

> Пробовал выполнять запрос и он говорит что такого поля он не нашел.
диалект смотрел?

> для проверки с которой небыло никаких проблем?
ну это из области фантастики, проблемы в том или ином виде есть всегда. ;о))

пример послал.. но боюсь, что вот это
> + те что идут как примеры у InterBase
указывает на очень старый IB, и возможно он его(пример) даже не откроет... а может просто будут  другие проблемы.


 
Iova   (2005-05-20 12:13) [26]

Спасибо за пример и для него работает.
Проверил запрос
SELECT RDB$FIELD_PRECISION FROM RDB$FIELDS.
Таблицу выдает 90 строк, но значений в них нет это нормально?


 
Iova   (2005-05-20 13:01) [27]

И еще моленький вопросик:
Если RDB$FIELD_PRECISION имеет пустые значения, то можно ли их вручную добавить для моих БД?



Страницы: 1 вся ветка

Текущий архив: 2005.06.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.027 c
6-1112087491
Sapsi
2005-03-29 13:11
2005.06.29
найти все компьютеры в сети


14-1117561565
Juice
2005-05-31 21:46
2005.06.29
FastNet есть в Д6 ?


3-1116708519
Starcom
2005-05-22 00:48
2005.06.29
Password...


1-1118049202
ORMADA
2005-06-06 13:13
2005.06.29
Поймать TImage под курсором


1-1118071657
Петя
2005-06-06 19:27
2005.06.29
можноли создать наделфи функцию у которой неизвусное число параме