Newsgroup: it.comp.lang.delphi
Titolo: D2007 : errore connesione a DB

sto provando ad eseguire una procedura di connessione ad un DB Firebird 2.0
embedded.
(con IBExpert in DB si apre tramite Connect to DataBase)
- sul Pc non e' installato Firebird
- fbembed.dll e' rquello di Firebird 2.0.1
- dbxint30.dll e' quello di D2007
e si trovano su <NomeApplicativo/Database>
- il db non e' in uso da altri programmi
- S.O. WinXP
all'esecuzione dell'istruzione Connected:=True ottengo
Acess violation at adress 00C5216B
in module dbxint30.dll at address 000000
se cambio i path a VendorLib e LibraryFile name e provo
ad impostare connected=true ottengo unaviable Database
la unit del Datamodule usa
unit unt_Dati;
interface
uses
  SysUtils, Classes, WideStrings, FMTBcd, SqlExpr, Provider, DB, DBClient;
^^^^^
puo' mancare qualche riferimento a unit DBX, che non vengono assegnate
in automatico ?
suggerimenti ?
Mauriziio
^^^^^
questo il codice che uso , in D2006 non ha problemi
procedure Tfrm_Dati.ConnettiDataBase(var Path,NomeDataBase:String);
begin
 with SQLConnection1 do
 begin
  if Connected then
  begin
   TD.TransactionID := 1;
   IDTrans.TransactionID:=TD.TransactionID;
   if SQLConnection1.InTransaction then
   try
    Commit(TD);
   except
    Rollback(TD);
   raise
   end;
  end;
  Params.Clear;
  Params.Add('User_Name');
  Params.Add('password');
  Params.Add('DriverName');
  Params.Add('DataBase');
  Params.Add('InterBase TransIsolation');
  Params.Add('SQLDialect');
  Params.Values['User_Name']:= SYSDBA';
  Params.Values['password']:= 'masterkey';
  Params.Values['DriverName']:= 'Interbase';
  Params.Values['Database']:= NomeDataBase;
  Params.Values['InterBase TransIsolation']:= 'ReadCommited';
  Params.Values['SQLDialect']:= '3';
  SQLConnection1.LibraryName:=Path+'Database\dbxint30.dll';
  SQLConnection1.VendorLib:=Path+'Database\fbembed.dll';
  LoginPrompt:=False;
  Connected:=True;
 end;
end;


Ci provo.
I problemi li hai avuti nel passaggio da D2006 a D2007 oppure da Firebird
1.5 a FB 2.0?
Nel secondo caso, hai copiato - oltre a tutti i file soliti - anche le Dll
ICU* che trovi in \bin nella directory della tua applicazione?
Nel primo caso - ma qui sto azzardando parecchio, visto che riguarda
ADO.NET
 - prova a mettere nei parametri di connessione anche "ServerType=1".
Ciao
-- 
ACSH
[TurboDelphi]
Chi fa da se', fatica il doppio

 ha scritto nel messaggio 
news:46790239$0$4787$4faf...@reader4.news.tin.it...


 ICU* che trovi in \bin nella directory della tua applicazione?
ti riferisci a icudt30.dll , icuin30.dll , icuuc30.dll , anche questo sono 
nella
cartella dall'applicazione dove si trova anche fbembed.dll
Maurizio 

ho fatto altre prove
1 Form con un TButton + Datamodule con SQLConnection
al cilck esegue la procedure per aprire il DB. del primo post
eseguita in D2006 con dbxint30.dll relativo a D2006 (funziona)
fatta ex novo con dbxint30 di D2007 (access violation dbxint30.dll)
impostate
- propieta' della connessione tramite l'editor
- i path di LibraryName e VendorLib sulla cartella
dove risiedono i file gds32.dll e dbxint30.dll
imposto connected=true
risultato cannot load dbxint30.dll (126)
it may be missing from the system path
1) apro datexplorer
vado su Interbase->TEST1 (nome della connessione)
click su Test
risultato : dbExpress vendor inizializazion failed
2) eseguo modify connection
scelgo nuovamente il file database (ma il path e'
sempre il medesimo, click su Test ed ottengo
Connection Successful
ora anche impostando Connected=True la connessione
ha successo
ma da codice esempre access violation dbxint30.dll
il comportamento e' a dir poco anomalo, non capisco
la differenza tra eseguire l'operazione 1 con o senza
il passo 2 dato che path e nome Database non cambiano
puo' trattarsi di un bug del nuovo driver dbexpress o altro ?
Maurizio

   SQLConnection1.VendorLib:=Path+'Database\fbembed.dll';
La DLL di FireBird deve trovarsi nella directory dell'applicazione (cioè 
del file eseguibile), nella directory di sistema o in una directory 
inclusa nel percorso di ricerca.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

>
ho provato anche come dici
-cartella Test con
* applicaztivo
* dbxint30.dll
* gds32.dll
* altre dll icu*.*
ma al momento della connessione SqlConnection1.Connected=True o Open
da' comunque access iolation dbxint30.dll , la unit interessata e'
dbxdynalink.
procedure TDBXDynalinkConnection.DerivedOpen;
var
  Count:          TInt32;
  Names:          TWideStringArray;
  Values:         TWideStringArray;
  IsolationLevel: Integer;
  DBXError:       TDBXErrorCode;
begin
  Count := FConnectionProperties.Properties.Count;
  FConnectionProperties.GetLists(Names, Values);
  CheckResult(FMethodTable.FDBXConnection_Connect(FConnectionHandle, Count,
Names, Values));
  DBXError := FMethodTable.FDBXConnection_GetIsolation(FConnectionHandle,
IsolationLevel);
  // Some drivers like mysql do not support isoalation level.
  //
  if DBXError = TDBXErrorCodes.NotSupported then
    IsolationLevel := TInt32(TDBXIsolations.DirtyRead)
  else
    CheckResult(DBXError);
  FIsolationLevel := TDBXIsolation(IsolationLevel);
end;
La causa era l'assegnazione dei parametri;
ho eliminato la cancellazione e assegnazione dei parametri che sono diversi
tra dbExpress di D2006 r D2007 (circa +6)
eseguendo SqlConnection1.Connected=True o SqlConnection1.Open il
database ora si apre senza errori
CheckResult(FMethodTable.FDBXConnection_Connect(FConnectionHandle, Count,
Names, Values));
ciao Maurizio