Announcement

Collapse
No announcement yet.

Reorganisation von dBase DBT Files mit dem C++ Builder 4

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Reorganisation von dBase DBT Files mit dem C++ Builder 4

    Wenn mir jemand mitteilen könnte wie das funktioniert. Diese Dateien entstehen durch die Verwendung von Memo oder BCD Felder. Im C++5.0x Compiler gab es hierfür einfach den Befehl PackTable welcher die als gelöscht markierten Sätze entfernte.
    Aber wie geht das mit TTable ?

  • #2
    Hallo Michael,
    wende einfach die BDI-Funktion DBIPackTable an. Nachstehend ein Auszug aus einem kleinen Programm, das Paradox- und DBase-Tabellen packen un indexieren kann. Ich hoffe, dass es hilft.

    procedure TFMain.Repariere(Alle:Boolean);<br>
    var<br>
    I:Integer;<br>
    T:TTable;<br>
    hDB:hDBIdb;<br>
    pTableDescCRTblDesc;<br>
    BDEResBIResult;<br>
    <br>
    function StrToOem(const AnsiStr:String):String;<br>
    begin<br>
    SetLength(Result, Length(AnsiStr));<br>
    if Length(Result)>0 then<br>
    CharToOem(PChar(AnsiStr),PChar(Result));<br>
    end;<br>
    <br>
    begin<br>
    gAbbruch:=False;<br>
    BAbbruch.Enabled:=True;<br>
    BSelekt.Enabled:=False;<br>
    BAlle.Enabled:=False;<br>
    with FileListBox1 do<br>
    begin<br>
    T:=TTable.Create(self);<br>
    T.Exclusive:=True;<br>
    T.DatabaseName:=Directory;<br>
    try<br>
    for I:=0 to Items.Count-1 do<br>
    if not gAbbruch and not Application.Terminated and (Selected[I] or Alle) then<br>
    with T do<br>
    begin<br>
    Label1.Caption:=ExtractFileName(Items[I]);<br>
    TableName:=Label1.Caption;<br>
    Application.ProcessMessages;<br>
    try<br>
    Open;<br>
    except<br>
    on E:Exception do<br>
    begin<br>
    if MessageDlg(E.Message,mtError,mbOkCancel,0)=mrCance l then<br>
    Exit;<br>
    continue;<br>
    end;<br>
    end;<br>
    hDB:=DBHandle;<br>
    if TableType=ttDefault then<br>
    begin<br>
    Close;<br>
    GetMem(pTableDesc,sizeof(CRTblDesc));<br>
    FillChar(pTableDesc^,sizeof(CRTblDesc),0);<br>
    StrPCopy(pTableDesc^.szTblName, StrToOem(TableName));<br>
    pTableDesc^.szTblType:=szParadox;<br>
    pTableDesc^.bPack:=True;<br>
    BDERes:=DBIDoRestructure(hDB,1,pTableDesc,nil,nil, nil, False);<br>
    if BDERes<>DBIERR_NONE then<br>
    DBIError(BDERes);<br>
    if pTableDesc<>nil then<br>
    FreeMem(pTableDesc,sizeof(CRTblDesc));<br>
    Open;<br>
    end<br>
    else<br>
    BDERes:=DBIPackTable(hDB,Handle,nil,szDBASE,True); <br>
    if BDERes=DBIERR_NONE then<br>
    BDERes:=DBIRegenIndexes(T.Handle);<br>
    if BDERes<>DBIERR_NONE then<br>
    DBIError(BDERes);<br>
    Close;<br>
    end;<br>
    finally<br>
    T.Free;<br>
    BAbbruch.Enabled:=False;<br>
    BSelekt.Enabled:=True;<br>
    BAlle.Enabled:=True;<br>
    Label1.Caption:='Fertig';<br>
    end;<br>
    end;<br>
    end;<br&gt

    Comment

    Working...
    X