注册 登录
编程论坛 Delphi论坛

请教两个问题(1:Delphi和excel;2:delphi和dbf)

lj_jzp 发布于 2010-04-26 16:19, 1260 次点击
一、Delphi于excel的问题:
  描述:excel没有关键字,各字段均可为空。
 1. 当前8行某列有值时,9行以后该列的数据可读出。
 2. 当前8行某列没有值时,9行以后该列的数据不能读出,为空。

代码我没写,直接用ADO连接EXCEL,ADOTABLE连接文件取出数据。用DBGRID显示出来。
ADOCONNECTION连接代码如下:
“Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=E:\分析中心程序\原始数据.xls;Mode=Read;Extended Properties=Excel 8.0;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False” 只是在ADOTABLE中选表时,出现了一个“表明+$”的表,比如我的WORKSHEET名称为“A”,在ADOTABLE中选表时出现:A 和A$,而且选A的话不能取出数据,只能选A$才能显示出数据(但是我只建了一个表A。   请高手赐教为什么?
二、Delphi如何彻底删除dbf表中的数据:我目前是分两个步骤删除,先打删除标记,在彻底删除。但有个问题,彻底删除时提示file is in use。
代码如下:(1)删除标记
var i:integer;
    dat_begin:string;
begin
  dat_begin:=formatdatetime('mm-dd-yyyy',datetimepicker1.date);
  with adoquery1 do
     begin
     close;
     sql.Clear;
     sql.Add('select * from sydrk ');
     //where rq = ctod('''+dat_begin+''')');
     open;
     for i:=1 to adoquery1.recordcount do
     delete;
     adoquery1.close;
     adoquery1.open;

代码如下:(2)彻底删除
   with adocommand1 do
     begin
     'pack sydrk.dbf';
     adocommand1.Execute;
     end;
请高手指教!!!
4 回复
#2
lj_jzp2010-04-26 16:25
想想还是把我的程序传个附件吧。钢开始用,不要见笑。
请吧程序放到E盘根目录即可打开。
只有本站会员才能查看附件,请 登录
#3
shuang2009112010-04-27 17:12
1:Delphi和excel;
  最好建个EXCEL OLE对象,然后把EXCEL内容一行一行地读程序来,再判断处理。到网上查一下Delphi Excel就有不少例子。
2:delphi和dbf
 删除数据为什么不用删除语句?
Delete from [TableName]
#4
2010-04-27 22:18
table1.empty;
#5
2010-04-28 13:45
    我最近也做了个项目,里面有Delphi和excel的操作,希望可以帮助你:
function TForm1.ExportDBGrid(DBGrid: TDBGrid; SheetName: string): Boolean;
var
  i,j,r,h,k,kk:Integer;
  app:OleVariant;
  ResultFileName:string;
  array1:array of string;
begin
  try
    Result:=true;
    app:=CreateOLEObject('Excel.application');
  except
    Application.MessageBox('Excel没有正确安装!','警告',MB_OK);
    result := False;
    exit;
  end;
  app.Workbooks.add;
  App.Columns[1].NumberFormatLocal:='@';
  App.Columns[2].NumberFormatLocal:='@';
  App.Columns[22].NumberFormatLocal:='@';
  App.Columns[23].NumberFormatLocal:='@';
  App.Columns[24].NumberFormatLocal:='@';
  App.Columns[27].NumberFormatLocal:='@';
  app.Visible := false;
  Screen.Cursor := crHourGlass;
  DBGrid1.DataSource.DataSet.First;
  UniQuery1.First;
  r:=0;
  while not UniQuery1.Eof do
  begin
    r:=r+1;
    UniQuery1.Next;
  end;
  for I := 0 to DBGrid1.FieldCount - 1 do
    app.cells(1,i+1):=DBGrid1.Columns[i].Title.Caption;
  DBGrid1.DataSource.DataSet.First;
  for j := 1 to r do
    begin
      for I := 0 to DBGrid1.FieldCount - 1 do
      begin
        app.cells(j+1,i+1):=DBGrid1.Fields[i].AsString;
        Next;
      end;
      DBGrid1.DataSource.DataSet.Next;
    end;
  setLength(array1,256);
  for   i   :=   0   to  256   do
    array1[i]:='';
  if cbb_xiangxian.Text='单相' then
  begin
    DBGrid1.DataSource.DataSet.First;
    with UniQuery2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select * from dxhbiaowc where (dxhbiaowc.dianya=''1Ub'' or dxhbiaowc.dianya=''220'')and ubiaohao='''+DBGrid1.Fields[0].AsString+'''');
      Open;
      kk:=0;
      DBGrid1.DataSource.DataSet.First;
      while not UniQuery2.Eof do
      begin
        app.cells(1,kk+28):=jydzl(UniQuery2.FieldByName('jiaoyandian').AsString);
        array1[kk]:=jydzl(UniQuery2.FieldByName('jiaoyandian').AsString);
        kk:=kk+1;
        UniQuery2.Next;
      end;
      DBGrid1.DataSource.DataSet.First;
      for j := 0 to r-1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select * from dxhbiaowc where (dxhbiaowc.dianya=''1Ub'' or dxhbiaowc.dianya=''220'')and ubiaohao='''+DBGrid1.Fields[0].AsString+'''');
        //UniQuery2.Params.ParamByName('ubiaohao').Value:=DBGrid1.Fields[0].AsString;
        open;
        UniQuery2.First;
        k:=0;
        while not UniQuery2.Eof do
        begin
          k:=k+1;
          UniQuery2.Next;
        end;
        UniQuery2.First;
        h := 0 ;
        while h<k  do
        begin
          for i:= 0 to kk do
          begin
            if jydzl(UniQuery2.FieldByName('jiaoyandian').AsString)=array1[i] then
            begin
              app.cells(j+2,i+28):=UniQuery2.FieldByName('wucha').AsString;
              UniQuery2.Next;
              h:=h+1;
              Break;
            end
            else if i=kk then
            begin
              KK:=kk+1;
              app.cells(1,kk+28):=jydzl(UniQuery2.FieldByName('jiaoyandian').AsString);
              app.cells(j+2,kk+28):=UniQuery2.FieldByName('wucha').AsString;
              //app.cells(j+2,i+28):='';
              //array1[kk]:='';
              array1[kk]:=jydzl(UniQuery2.FieldByName('jiaoyandian').AsString);
              //app.cells(j+2,kk+28):=UniQuery2.FieldByName('wucha').AsString;
              UniQuery2.Next;
              h:=h+1;
            end;
          end;
        end;
        DBGrid1.DataSource.DataSet.Next;
      end;
      if ResultFileName = '' then
        ResultFileName := Edit5.Text;
      app.Activeworkbook.saveas(edit5.Text);
      app.Activeworkbook.close(false);
      app.quit;
      app := unassigned;
      Application.MessageBox('数据导出成功!','提示',MB_OK);
    end;
  end
  else
  if cbb_xiangxian.Text='三相' then
  begin
    DBGrid1.DataSource.DataSet.First;
    with UniQuery2 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select distinct(a.jiaoyandian),a.ubiaohao,a.wucha,a.dianya,a.zhuangtai from sxhbiaowc a where ubiaohao='''+DBGrid1.Fields[0].AsString+'''order by jiaoyandian');
      Open;
      kk:=0;
      DBGrid1.DataSource.DataSet.First;
      while not UniQuery2.Eof do
      begin
        app.cells(1,kk+28):=jydzl(UniQuery2.FieldByName('jiaoyandian').AsString);
        array1[kk]:=jydzl(UniQuery2.FieldByName('jiaoyandian').AsString);
        kk:=kk+1;
        UniQuery2.Next;
      end;
      DBGrid1.DataSource.DataSet.First;
      for j := 0 to r-1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('select distinct(a.jiaoyandian),a.ubiaohao,a.wucha,a.dianya,a.zhuangtai from sxhbiaowc a where ubiaohao='''+DBGrid1.Fields[0].AsString+'''order by jiaoyandian');
        //UniQuery2.Params.ParamByName('ubiaohao').Value:=DBGrid1.Fields[0].AsString;
        open;
        UniQuery2.First;
        k:=0;
        while not UniQuery2.Eof do
        begin
          k:=k+1;
          UniQuery2.Next;
        end;
        UniQuery2.First;
        h := 0 ;
        while h<k  do
        begin
          for i:= 0 to kk do
          begin
            if jydzl(UniQuery2.FieldByName('jiaoyandian').AsString)=array1[i] then
            begin
              app.cells(j+2,i+28):=UniQuery2.FieldByName('wucha').AsString;
              UniQuery2.Next;
              h:=h+1;
              Break;
            end
            else if i=kk then
            begin
              KK:=kk+1;
              app.cells(j+2,kk+28):=UniQuery2.FieldByName('wucha').AsString;
              app.cells(1,kk+28):=jydzl(UniQuery2.FieldByName('jiaoyandian').AsString);
              //app.cells(j+2,kk+27):=UniQuery2.FieldByName('wucha').AsString;
              //app.cells(j+2,i+28):='';
              //array1[kk]:='';
              array1[kk]:=jydzl(UniQuery2.FieldByName('jiaoyandian').AsString);
              //app.cells(j+2,kk+28):=UniQuery2.FieldByName('wucha').AsString;
              UniQuery2.Next;
              h:=h+1;
            end;
          end;
        end;
        DBGrid1.DataSource.DataSet.Next;
      end;
    end;
    if ResultFileName = '' then
      ResultFileName := '数据导出';
    app.Activeworkbook.saveas(Edit5.Text);
    app.Activeworkbook.close(false);
    app.quit;
    app := unassigned;
    Application.MessageBox('数据导出成功!','提示',MB_OK);
  end;
   

end;
1