在delphi7中使用Interbase

时间:2016-07-04 06:56:56

标签: database delphi firebird interbase

我是delphi中Interbase的新手。谁能告诉我如何正确使用Interbase在编码中查询Firebird数据库中的数据?我尝试过这样的事情:

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;

1 个答案:

答案 0 :(得分:0)

您应该将Query挂钩到数据源,使用DBBandedTableView并将DBBandedTableView链接到Query。 cxGrid1BandedTableView1.DataController不应该像这样填充。