![]() |
Datenbank: FireBird • Version: 1.5 • Zugriff über: IBX :(
Firebird: Simple Abfrage per IBX... O_o
Ich muss gerade eine kleine App in Delphi32 bauen (einem 200 Jahre alten NT4 Server sei Dank. :evil: ).
Da ich dort nur in einer Cytrix session laufe dachte ich, ich nehme mir eine kleine Firebird und eine Echse mit, die anhand der kleinen DB und der darin enthaltenen Meta Daten SQL Statements absetzt, usw... Schön und gut... Nur scheitere ich schon bei den simpelsten Dingen. :( Mit dem Firebird Data provider für .Net funktioniert zum BLeistift das problemlos:
Code:
Das Äquvalent unter Delphi sollte eigentlich so aussehen (ich habe hier das drumrum mitgepostet...):
...
IDbCommand someCommand = someConnection.CreateCommand(); someCommand.Connection = someConnection; someCommand.CommandType = CommandType.Text; someCommand.CommandText = "SELECT Id FROM MetaColumns WHERE MetaTable = @MetaTable"; IDbDataParameter metaTable = someCommand.CreateParameter(); metaTable.ParameterName = "@MetaTable"; metaTable.DbType= DbType.Int64; metaTable.Value = Id; someCommand.Parameters.Add(metaTable); IDbDataReader = someCommand .ExecuteReader(); ...
Delphi-Quellcode:
Er sagt mir dabei aber nur "unsupported feature". :wall:
procedure TMetaTable.FetchColumns;
var ColumnId : Int64; begin fColumns.Clear(); with TIBQuery.Create(nil) do try Database := TMetaDatabase.Instance; Transaction := TIBTransaction.Create(nil); Transaction.DefaultDatabase := Database; with Sql do begin Add('SELECT Id'); Add('FROM MetaColumns'); Add('WHERE MetaTable = :MetaTable'); end; ParamCheck := True; with ParamByName('MetaTable') do begin DataType := ftLargeInt; Value := Id; end; if not Prepared then Prepare(); Open(); // <--- Hier zickt er rum while not Eof do begin ColumnId:= Fields[0].AsInteger; fColumns.Add(TMetaColumn.Create(ColumnId)); Next(); end; finally Free(); end; end; Das ganze funktioniert problemlos, wenn ich es im Designer in eine Query packen würde! :gruebel: Aber eine olle Query auf eine Form ist natürlich nicht drin. ;) Ich habe es auch schon mit einer selectable procedure probiert -> ebenfalls Fehlanzeige. Bin ich mittlerweile zu blöd für Delphi32? Ist euch das schonmal untergekommen? Ist das ein Kompatibilitätsproblem IBX <> FB? Ich hoffe mal, dass ich einfach zu blöd bin. :angle2: |
Re: Firebird: Simple Abfrage per IBX... O_o
Hi Robert,
versuch mal folgendes:
Delphi-Quellcode:
IBQuery und IBTable sind nur aus kompatibilitätsgründen implementiert worden!!!!! Die sollen bei einr Umstellung von BDE->IBX zum Einsatz kommen, bis der entsprechende Co
procedure TMetaTable.FetchColumns;
var ColumnId : Int64; begin fColumns.Clear(); with TIBDataSet.Create(nil) do try Database := TMetaDatabase.Instance; Transaction := TIBTransaction.Create(nil); Transaction.DefaultDatabase := Database; Sql do begin Add('SELECT Id'); Add('FROM MetaColumns'); Add('WHERE MetaTable = :MetaTable'); end; ParamByName('MetaTable').AsInt64:=Id; Open(); // <--- Hier zickt er rum while not Eof do begin ColumnId:= Fields[0].AsInteger; fColumns.Add(TMetaColumn.Create(ColumnId)); Next(); end; finally Free(); end; end; |
Re: Firebird: Simple Abfrage per IBX... O_o
Hi,
mir ist schon öfter zu Ohren gekommen, dass man IBX und FB nicht zusammen benutzen soll, da FB und IB schon zu unterschiedlich sind und die IBX sich eher an IB als an FB orientieren. Vielleicht liegt hier einfach das Problem. LG |
Re: Firebird: Simple Abfrage per IBX... O_o
@Lemmy
thx Das war's. :) Ich nehme normalerweise die simpelste Zugriffsklasse um unnötigen Overhead zu vermeiden. (Deshalb die Query ;) ) IBX, scheint da wohl anderer Meinung zu sein. :zwinker: Gibt es da auch eine Klasse, die nicht von TCustomDataSet ableitet? OOP und DB Awareness passen eh nicht zusammen, da wären diese ganzen Funktionen einfach überflüssig... |
Re: Firebird: Simple Abfrage per IBX... O_o
Zitat:
|
Re: Firebird: Simple Abfrage per IBX... O_o
Komplett OT:
@Hansa Hast du dir überhaupt durchgelesen, was ich geschrieben habe? :gruebel: Man, man.... wenn du auch nur halb soviel Ahnung hättest wie du behauptest... Dann könnte man mit deinen Aussagen vielleicht sogar was anfangen. Ich sage nur abstract. :lol: *ROFL* |
Re: Firebird: Simple Abfrage per IBX... O_o
Hi Robert,
wenn Du so wenig Overhead wie möglich verwenden willst, dann versuch mal TIBSQL. Das funzt solange Du nur Insert/Delete/Update oder ein Select mit genau einem Rückgabewert ausführen willst. Ansonsten aber immer TIBDataSet. Das verwende ich selbst bei StoredProcedures. Grüße Lemmy |
Re: Firebird: Simple Abfrage per IBX... O_o
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz