2016-07-04 22 views
0

Ich bin neu in Delphi Interbase. Könnte jemand mir zeigen, wie man Interbase richtig benutzt, um Daten von einer Firebird Datenbank in der Kodierung abzufragen? Ich habe so etwas wie dies versucht:Verwenden von Interbase in delphi7

procedure TfJM00001.af_search; 
var 
    i  : integer; 
    qryQuery : TIBdataset; 
    sql : string; 
begin 
    Try 
    qryQuery := TIBDataSet.Create(nil); 
    qryQuery.Database := IBDatabase1; 
    qryQuery.Transaction := qryQuery.Database.DefaultTransaction; 

    sql := ' select pro.pro_id, pro.pro_nm, cat.cat_nm, div.division_nm,  pro.price, pro.weight, pro.qty , typ.type_nm, pro.images ' + #13#10 + 
    ' from product pro ' +#13#10+ 
    ' left join division div on div.division_id = pro.division_id ' +#13#10+ 
    ' left join category cat on cat.cat_id = pro.cat_id ' +#13#10+ 
    ' left join tbl_type typ on typ.type_id = pro.type_id; ' ; 

try 

    qryQuery.Close; 
    qryQuery.SelectSQL.Text := sql; 
    qryQuery.Open; 

    if qryQuery.RecordCount < 0 then exit; 

    with cxGrid1BandedTableView1.DataController do 
    begin 
    RecordCount := 0; 
    BeginUpdate; 
     while not(qryQuery.Eof) do 
     begin 
     i := AppendRecord; 

     SetValue(i, col_Pro_Id.Index   ,qryQuery.FieldByName('PRO_ID').AsString); 
     SetValue(i, col_Pro_NM.Index   ,qryQuery.FieldByName('PRO_NM').AsString); 
     SetValue(i, col_Cat_NM.Index   ,qryQuery.FieldByName('CAT_NM').AsString); 
     SetValue(i, col_Type_NM.Index  ,qryQuery.FieldByName('TYPE_NM').AsString); 
     SetValue(i, col_Price.Index   ,qryQuery.FieldByName('PRICE').AsString); 
//  SetValue(i, Col_Description.Index ,qryQuery.FieldByName('PRO_NM').AsString); 
     SetValue(i, Col_Weight.Index   ,qryQuery.FieldByName('WEIGHT').AsString); 
     SetValue(i, col_Qty.Index   ,qryQuery.FieldByName('QTY').AsString); 
     SetValue(i, col_Division.Index  ,qryQuery.FieldByName('DIVISION_NM').AsString); 
//  SetValue(i, col_register_date.Index ,qryQuery.FieldByName('PRO_NM').AsString); 
     //SetValue(i, col_Compound.Index  ,qryQuery.FieldByName('Images').AsVariant); 
     qryQuery.Next; 
     end; 
    EndUpdate; 
    end; 
except on 
e : exception do 
begin 
    showmessage('Error Message : ' + e.Message); 
end; 
end; 
    Finally 
    qryQuery.Database.DefaultTransaction.Active := False; 
    end; 
end; 
+2

SO ist über ** spezifische ** Fragen. Was genaues Problem hast du? – MartynA

+3

Firebird! = Interbase. Ist Ihre Frage wirklich über Interbase oder über Firebird, weil diese beiden nicht (mehr) identisch sind und Sie Interbase nicht verwenden können, um eine Firebird-Datenbank abzufragen. –

+0

Ich habe eine Datenbank, die eine (* .fdb) ist und in meinem Programm Interbase-Komponente verwendet, um Daten von (*. Fdb) abzufragen ist es okay, das zu tun? oder gibt es noch andere, um dies zu erreichen? –

Antwort

0

Sie sollen bis zu einer Datenquelle der Abfrage-Haken, eine DBBandedTableView nutzen und verknüpfen Sie die DBBandedTableView auf die Abfrage. Der cxGrid1BandedTableView1.DataController soll nicht wie folgt gefüllt werden.