Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Вниз

Connect to Informix   Найти похожие ветки 

 
Хома   (2004-09-29 17:35) [0]

Уважаемые програмисты. Помогите, если знаете. Насамом деле вопроса 2 и они друг друга заменяют.
1. Использую для конекта к информиксу dbExpress (возможно не лучшый вариант, может что еще посоветуете?). Но создаю его динамически в потоке. Компоненты такие: TSQLConnection <- TSQLDataSet <- TDataSetProvider <- TClientDataSet <- TDataSource.
SQL-запрос добавляю в TSQLDataSet, а открываю TClientDataSet. Но это так, к слову для проверки. Проблема в следующем. Создаю компоненты с владельцем nil. Инициализирую по примеру компонент из палитры. Но при попытки открыть Client выдается ошибка "Client: Missing data provider or data packet". Что могло ее вызвать?
2. Есть ли какие более хорошие компоненты для доступа к Информиксу? Я слышал о IDAC (Informix Data Access Components), но она триальная. Нет ли у кого крякнутой?


 
sniknik ©   (2004-09-29 17:46) [1]

> выдается ошибка "Client: Missing data provider or data packet". Что могло ее вызвать?
не все заполнил в клиентском датасете
имя правайдера не указал.


 
Хома   (2004-09-30 09:56) [2]


 Connection:=TSQLConnection.Create(nil);
 qSelect:=TSQLDataSet.Create(nil);
 qUpdate:=TSQLDataSet.Create(nil);
 Provider:=TDataSetProvider.Create(nil);
 Client:=TClientDataSet.Create(nil);
 Source:=TDataSource.Create(nil);

 with Connection do begin
   ConnectionName:="InformixConnection";
   DriverName:="Informix";
   GetDriverFunc:="getSQLDriverINFORMIX";
   LibraryName:="dbexpinf.dll";
   LoginPrompt:=false;
   VendorLib:="isqlb09a.dll";
   Params.Add("DriverName=Informix");
   Params.Add("HostName=server");
   Params.Add("DataBase=db");
   Params.Add("User_Name=user");
   Params.Add("Password=pwd");
   Params.Add("Informix TransIsolation=ReadCommited");
 end;

 qSelect.NoMetadata:=true;
 qSelect.ObjectView:=true;
 qSelect.SQLConnection:=Connection;

 qUpdate.NoMetadata:=true;
 qUpdate.SQLConnection:=Connection;

 with Provider do begin
   Constraints:=true;
   DataSet:=qSelect;
   Exported:=true;
   Name:="Provider";
   Options:=[];
   ResolveToDataSet:=true;
   UpdateMode:=upWhereAll;
 end;

 with Client do begin
   AggregatesActive:=false;
   DisableStringTrim:=false;
   FetchOnDemand:=true;
   ObjectView:=true;
   PacketRecords:=-1;
   ProviderName:="Provider";
   StoreDefs:=true;
 end;

 Source.DataSet:=Client;

 qSelect.Close;
 qSelect.CommandText:=exec_sql;
 Client.Open;



Это код создания. Клиент вроде заполнил весь. Может что еще не указал? Бага вылезает на строке Client.Open;


 
sniknik ©   (2004-09-30 11:07) [3]

> Может что еще не указал?
может это и не касается баги, но так будет лучше помоему

Provider.Options:= [poAllowCommandText];
и
Client.Close;
Client.CommandText:=exec_sql;
Client.Open;

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


 
Sandman25 ©   (2004-09-30 11:50) [4]

Хорошие dbExpress драйвера есть на http://www.luxena.com Только они платные.


 
Хома   (2004-09-30 12:02) [5]

Ну что лишнего я это понимаю:) Я же говорил, что в тупую перенял из палитры компонентов (не не все конечно, а почти). Фишка такая, что у меня компаненты и были накиданы на форму (DataModule). Работали, но только если запрос запускать из главного потока (с формы). А нужно запускать из потока. Если запускать из потока так же как и из главной формы, то выдается ошибка, что Connection name in use.
Я вот подумал, что может будет все в норме, если все компоненты создавать в потоке. Все свойства задаю также, и появляется выше указанная проблема.


 
Хома   (2004-09-30 12:04) [6]

Вот именно. Платные. А есть у кого крякнутые? Я слышал, что IDAC (ихний же) тоже хорош, но он и стоит.


 
sniknik ©   (2004-09-30 12:07) [7]

кстати напомнил, именно с dbExpress была какаято проблема в компаненте TSQLDataSet заменил на TSQLQuery и все прошло. (к сожалению не помню что было, чтото связанное с передачей параметра/запроса через TDataSetProvider)
попробуй тоже поменять, может и тебе поможет, попытайся хотябы ;о)).


 
Sandman25 ©   (2004-09-30 12:09) [8]

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


 
sniknik ©   (2004-09-30 12:13) [9]

> что Connection name in use.
при создании делай Connection.Name:= ""; помогает, это когда несколько создается, по умолчанию у них одно имя получается.

> Я вот подумал, что может будет все в норме, если все компоненты создавать в потоке. Все свойства задаю также, и появляется выше
> указанная проблема.
теоретически да, должно быть. и даже так правильней если хотя бы часть в потоке (синхронизации не нужно)
и у меня так работает (в потоке со всеми созданными компанентами), но используется ADO компаненты а не dbExpress.


 
Хома   (2004-09-30 12:18) [10]

2 sniknik:
Попытался, поменял, все также и осталось:( И к томуже, на сколько мне известно, TSQLQuery однонаправленный набор. А тут набор потом связывается с гридом. Т.ч. однонаправленный ни как не подходит:(

2 Sandman25:
У меня получалось получать данные в неглавном. Но только на BDE и InterBase компонентах. В с dbExpress чо-то творится:(


 
Sandman25 ©   (2004-09-30 12:31) [11]

[10] Хома   (30.09.04 12:18)

Я писал именно о dbExpress.


 
Хома   (2004-09-30 12:36) [12]

Ааа. Вот у меня тоже с ними фигня. А dbx драйвера только они (Luxena) делают? Или можно где нибудь еще найти?


 
Sandman25 ©   (2004-09-30 12:48) [13]

Насколько я знаю, только они. Ну и еще Borland"овские, конечно.


 
Хома   (2004-09-30 13:07) [14]

А есть ли какие free/cracked компоненты для доступа к Informix? А то чувствую, что с dbx я еще намучаюсь:( А время-то поджимает:)


 
Хома   (2004-09-30 13:11) [15]

Да и видать dbx прохо поддерживает многопоточность:(


 
sniknik ©   (2004-09-30 13:25) [16]

> В с dbExpress чо-то творится:(
забавная вещь с ними. действительно. правда на IB пробовал но тоже самое получил, пока не сделал пару изменений упорно выдавало эту ошибку
вот рабочий код (что получилось, может поможет)


 SQLConnection:= TSQLConnection.Create(self);
 SQLConnection.ConnectionName:= "IBConnection";
 SQLConnection.DriverName:= "Interbase";
 SQLConnection.GetDriverFunc:= "getSQLDriverINTERBASE";
 SQLConnection.LibraryName:= "dbexpint.dll";
 SQLConnection.LoginPrompt:= false;
 SQLConnection.VendorLib:= "gds32.dll";
 SQLConnection.Params.Add("DriverName=Interbase");
 SQLConnection.Params.Add("Database=D:\DB\CONMAN.GDB");
 SQLConnection.Params.Add("RoleName=RoleName");
 SQLConnection.Params.Add("User_Name=sysdba");
 SQLConnection.Params.Add("Password=masterkey");
 SQLConnection.Params.Add("ServerCharSet=");
 SQLConnection.Params.Add("SQLDialect=3");
 SQLConnection.Params.Add("ErrorResourceFile=");
 SQLConnection.Params.Add("LocaleCode=0000");
 SQLConnection.Params.Add("BlobSize=-1");
 SQLConnection.Params.Add("CommitRetain=False");
 SQLConnection.Params.Add("WaitOnLocks=True");
 SQLConnection.Params.Add("Interbase TransIsolation=ReadCommited");
 SQLConnection.Params.Add("Trim Char=False");

 SQLQuery:= TSQLQuery.Create(self);
 SQLQuery.SQLConnection:= SQLConnection;
 //SQLQuery.SQL.Add("SELECT * FROM CONTACTS");
 //SQLQuery.Open;

 DataSetProvider:= TDataSetProvider.Create(self);
 DataSetProvider.DataSet:= SQLQuery1;
 DataSetProvider.Options:= [poAllowCommandText];
 DataSetProvider.Name:= "DataSetProvider";

 ClientDataSet:= TClientDataSet.Create(self);
 ClientDataSet.ProviderName:= "DataSetProvider";
 ClientDataSet.CommandText:= "SELECT * FROM CONTACTS";

 DataSource1.DataSet:= ClientDataSet;
 ClientDataSet.Open;


в общемто похоже он без предка не работает (nil), и имя провайдера ему необходимо, изменение одного из этого дает ошибку.
попробуй у себя nil на self поменять.


 
Хома   (2004-09-30 15:59) [17]

Ну имя провайдера я задаю, а вот к сожалению поток (TThread) не может выступать в роле владельца:( Сейчас попробую создать в потоке невидимую форму и выставить ее в качестве владельца.


 
Хома   (2004-09-30 16:07) [18]

Получилось:)!! Создаешь форму (просто Create(nil)). И делаешь ее предком. (потом естественно освобождаешь). И все! sniknik, ты был прав. Они без владельца не умеют. :)


 
Sandman25 ©   (2004-09-30 16:12) [19]

Понятно. Слава sniknik, позор dbX.


 
Хома   (2004-09-30 16:35) [20]

:-)


 
sniknik ©   (2004-09-30 16:44) [21]

> Получилось:)!! Создаешь форму (просто Create(nil)). И делаешь ее предком.
тоже пробовал, форма необязательно(вообще форма в потоке... както не по себе ;) с TComponent срабатывает

procedure TDoThread.Execute;
var Cmp: TComponent;
begin
 Cmp:= TComponent.Create(nil);
 SQLConnection:= TSQLConnection.Create(Cmp);
 ...
 дальше по тексту


и даже ;о))
SQLConnection:= TSQLConnection.Create(nil);
...
SQLQuery:= TSQLQuery.Create(SQLConnection);
...
DataSetProvider:= TDataSetProvider.Create(SQLConnection);
...
ClientDataSet:= TClientDataSet.Create(SQLConnection);

работает. забавно.


 
Хома   (2004-09-30 16:59) [22]

Дейстительно работает. И правда забавно. Получается, что TSQLConnection может выступать владельцем? Странно. Но факт.
А форма в потоке - это правда как-то не правильно:) Но это первое, что пришло мне в голову. (маловато опыта видать).



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

Форум: "Базы";
Текущий архив: 2004.10.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.035 c
3-1096994309
sh
2004-10-05 20:38
2004.10.31
Как получить сумму значений по диапазонам


3-1096527989
Виктор
2004-09-30 11:06
2004.10.31
Keyfields с двумя полями в Lookup поле.


1-1097654233
П7
2004-10-13 11:57
2004.10.31
Динамические кнопки и их события


6-1093108291
Asd
2004-08-21 21:11
2004.10.31
Асинхронная ошибка как с ней бороться


1-1097833041
diabolik_krsk
2004-10-15 13:37
2004.10.31
Размер последней колонки DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский