Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBase (dbf) mit 3 Index-Dateien, aber werden nicht angezeigt (https://www.delphipraxis.net/12880-dbase-dbf-mit-3-index-dateien-aber-werden-nicht-angezeigt.html)

X-Dragon 9. Dez 2003 11:01

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Hab aktuell gerade einen Testlauf am laufen und so wie es aktuell aussieht dauert es über 6,5 Std. bis er komplett durch ist. Also falls jemand noch Vorschläge hat, bin für alles offen (Try-finally, und sonstiges zur Statusanzeige hab ich erstmal alles rausgenommen damit es übersichtler ist):
Delphi-Quellcode:
var
  i, z : Cardinal;
  nr   : Single;
  str  : String;
  dbtxt : TStrings;
begin
  steppi := 0;

  dbtxt := TStringList.Create;
  dbtxt.LoadFromFile(QuellDB);

  z := dbtxt.Count;

  with TTable.Create(nil) do
  begin
    DatabaseName := 'EinAlias';
    TableName := ZielDB;
    Open;

    for i := 1 to z -1 do
    begin
      str := AnsiToIBMAscii(Copy(dbtxt[i], 1,12));

      if Locate('ARTN', str, []) then
        Edit
          else Append;

      FieldByName('ARTN').AsString := str;
      FieldByName('ARTU').AsString := AnsiToIBMAscii(Copy(dbtxt[i],13,12));
      FieldByName('ARTD').AsString := AnsiToIBMAscii(Copy(dbtxt[i],27,12));
      FieldByName('TAUS').AsString := AnsiToIBMAscii(Copy(dbtxt[i],39, 1));
      FieldByName('BEZE').AsString := AnsiToIBMAscii(Copy(dbtxt[i],53,12));

      if Trim(Copy(dbtxt[i], 69,7)) <> '' then
      begin
        nr := StrToInt(Copy(dbtxt[i], 69,7)) div 100;
        FieldByName('VK').AsFloat := nr;
        FieldByName('EK3').AsFloat := nr;
      end
        else
        begin
          FieldByName('VK').AsFloat := 0;
          FieldByName('EK3').AsFloat := 0;
        end;

      FieldByName('BCODE').AsString := AnsiToIBMAscii(Copy(dbtxt[i],76, 1));
      FieldByName('PCODE').AsString := AnsiToIBMAscii(Copy(dbtxt[i],77, 1));

      if Trim(Copy(dbtxt[i],134,7)) <> '' then
        FieldByName('EK1').AsFloat := StrToInt(Copy(dbtxt[i],134,7)) div 100
        else FieldByName('EK1').AsFloat := 0;

      if Trim(Copy(dbtxt[i],141,7)) <> '' then
        FieldByName('EK2').AsFloat := StrToInt(Copy(dbtxt[i],141,7)) div 100
        else FieldByName('EK2').AsFloat := 0;

      Post;
      Application.ProcessMessages;
    end;

    Close;
  end;
end;

Sourcemaker 9. Dez 2003 12:41

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Hi,

wenn die Datenbank nicht gemeinsam (gleichzeitig) mit der anderen Anwendung geöffnet wird kannst du sie exclusiv öffnen das bringt richtig Geschwindigkeit.

Gruß

Frank

X-Dragon 9. Dez 2003 13:17

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Zitat:

Zitat von Sourcemaker
Hi,

wenn die Datenbank nicht gemeinsam (gleichzeitig) mit der anderen Anwendung geöffnet wird kannst du sie exclusiv öffnen das bringt richtig Geschwindigkeit.

Gruß

Frank

Danke für den Tip, daran hab ich noch gar nicht gedacht. Also auf die DB hab ich exklusiven Zugriff, kann es also gut einsetzen :).

X-Dragon 10. Dez 2003 10:34

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Der Exclusive-Zugriff hat leider nicht wirklich was geändert ...

Aber ich hab jetzt XBase++ 1.1 aufgetrieben, nur leider kann ich irgendwie nix damit anfangen. Das einzige was ich gefunden habe sind 2 DLL-Dateien (DbfDbe.DLL u. NTXDbe.DLL) in einem Unterzeichnis des Programms. Ansonsten wird dort ja noch fast alles in DOS kompiliert etc und nur die Fenster kann man unter Windows zusammenbasteln. In den Code-Beispielen die dabei waren werden halt XBase-Befehle eingesetzt um auf die DBs zuzugreifen, aber das hilft mir irgendwie auch nicht weiter. Wie kann ich wohl die DB-Treiber nutzen? Ist es überhaupt so möglich?

Alternativ bastel ich gerade an einer anderen Lösung. Und zwar das ich die Daten aus der DBF-Datei(100 MB) komplett in einen Paradox-DB übernehme (mit Index :)) dort dann die 230.000 Datensätze ver- und abgleiche und anschliessend die kompletten Daten wieder zurück in die DBF schreibe (die ich natürlich vorher ausleere). Und vom Programm das die DBF-DB dann nutzt, wird die DB dann sowieso neu reorganisiert. Dürfte zumindest schneller sein, als die vorherge Variante da diese nach letzten Schätzungen um die 8 Std. läuft ...

Sourcemaker 10. Dez 2003 10:52

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Hi,

mit den XBase kannst du vergessen da wirst du keinen Chance haben.
Was ich die anbieten könnte das du den Datenbankcode kapsels in einen extra Programm und ich das entsprechend mit Apollo compiliere.

Gruß

Frank

KarstenW 10. Dez 2003 11:24

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
ADS kann DBase3-Tabellen mit Clipper-, bzw XBase-Index. Also den NTX Dateien.
Hat r_kerber doch schon geschrieben.

Also bei Extendetsystems mal den ARC32 runterladen, das ist die Datenbankoberfläche
und Testen obs geht.

Bei mir laufen die alten Clipper-Programme z. Teil auch noch, und mit meinen Delphiprogrammen
greif ich auch auf die gleichen Tabellen und Index zu.
Aber nicht vergessen: Diese Index müssen extra geöffnet werden. Und man muß wissen, welche
Indexdatei zu welchet Tabelle gehört. Im Kopf der Indexdatei steht nur das Feld.

Karsten

X-Dragon 10. Dez 2003 11:43

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Zitat:

Zitat von Sourcemaker
Hi,

mit den XBase kannst du vergessen da wirst du keinen Chance haben.
Was ich die anbieten könnte das du den Datenbankcode kapsels in einen extra Programm und ich das entsprechend mit Apollo compiliere.

Gruß

Frank

Schade, wäre auch wirklich zu einfach gewesen ... Danke für das Angebot, aber vielleicht klappt das ja mit ADS, dann wäre ich auch felxibler falls sich zwischendurch irgendwas an den DBs ändert.

Zitat:

Zitat von KarstenW
ADS kann DBase3-Tabellen mit Clipper-, bzw XBase-Index. Also den NTX Dateien.
Hat r_kerber doch schon geschrieben.

Also bei Extendetsystems mal den ARC32 runterladen, das ist die Datenbankoberfläche
und Testen obs geht.

Bei mir laufen die alten Clipper-Programme z. Teil auch noch, und mit meinen Delphiprogrammen
greif ich auch auf die gleichen Tabellen und Index zu.
Aber nicht vergessen: Diese Index müssen extra geöffnet werden. Und man muß wissen, welche
Indexdatei zu welchet Tabelle gehört. Im Kopf der Indexdatei steht nur das Feld.

Karsten

Was brauch denn da jetzt, blick da nicht so ganz durch (und kann man das kostenlos nutzen?):
http://www.extendedsystems.com/ADS/B...+Downloads.htm

Hab vorher schon mal danach gesucht bin aber nur auf der Server-Variante gestossen und das diese mehrere 100€ kostet ...

Sourcemaker 10. Dez 2003 11:48

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Hi,

Apollo kostet $379 Apollo-Homepage

War das andere was ich dir angeboten habe keine Alternative ?

Gruß

Frank

X-Dragon 10. Dez 2003 11:55

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Zitat:

Zitat von Sourcemaker
Hi,

Apollo kostet $379 Apollo-Homepage

War das andere was ich dir angeboten habe keine Alternative ?

Gruß

Frank

Und mein Chef will kein Geld dafür ausgeben :).

Erstmal wäre das wohl eine super Alternative, aber wie soll ich das denn "kapseln" so das ich auch auf Änderungen der DB-Struktur reagieren kann?

Sourcemaker 10. Dez 2003 12:20

Re: DBase (dbf) mit 3 Index-Dateien, aber werden nicht angez
 
Hi,

hol dir doch die Eval-Version von Apollo du entwickelst und ich linkes es für dich.
Ich weiß natürlich nicht wie statisch das X-Base-Projekt ist also wie oft du anpassen mußt oder umgekehrt sich deine Quelldaten ändern.

Grüße

Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz