Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi dBase Datenbank dauerhaft verbinden mit Apollo (https://www.delphipraxis.net/58750-dbase-datenbank-dauerhaft-verbinden-mit-apollo.html)

verrückter 12. Dez 2005 09:05

Datenbank: DBase • Version: xx • Zugriff über: Apollo 6.1

dBase Datenbank dauerhaft verbinden mit Apollo
 
hi

schreibe gerade ein Programm welches aus einer XML datei verschiedene ID´s ausließt und diese dann an eine Funktion übergibt, welche eine DB connection herstellt und diese werte dann prüft. Jedoch öffnet er bei jedem funktionsaufruf die DB was bei 5000 zugriffen zuviel ist.
Nun würde ich gerne eine funktion/ procedure schreiben, welche meine DB beim Programmstart öffnen und offen lässt und erst beim beenden wieder schließt. Das ganze soll in delphi mit Apollo realisiert werden und greift auf eine dBase DB zu.
hier ist der Code den ich bissher geschrieben habe. hier wird bei jedem übergebenem Node die DB geöffnet und danach geschlossen.


Delphi-Quellcode:
//Datenbanken testen
procedure TForm1.DBtestID(Node: TdomNode);
var
  Elem: TDomElement;
  id: String;
begin
  if (node.nodeName = 'XX') then begin
  elem:= node.findFirstChildElement;
    while (elem <> nil) do begin
      if (Elem.nodeName = 'unterknoten') then begin
        id:= elem.getAttributeLiteralValue('id');
        id:= RightStr(id,length(id)-6);
        Elem:= elem.findNextSiblingElement;
        TestID(id); //aufruf der proedure TestDB
      end;
    end;
  end;
end;

//Öffnet eine DB und prüft ob ID in DB vorhanden ist und gibt die falsche ID aus
procedure TForm1.TestID(id: String);
var
  test: String;
begin
  ApolloTable1.Active:= false;
  ApolloTable1.Filtered:= False;
  ApolloTable1.Filter:= 'id= ' + queryEncode(id, 16);
  ApolloTable1.Filtered:= True;
  ApolloTable1.Open;
  test:= ApolloTable1.FieldByName('wort').AsString;
  if (test = '') then begin
    Label1.Caption:= 'zu folgenden ID´s existieren keine Einträge';
    ListBox1.Items.Append(id)
    end;
end;
Wäre nett wenn Ihr mir helfen könntet.


VG
Verrückter

Bernhard Geyer 12. Dez 2005 10:01

Re: dBase Datenbank dauerhaft verbinden mit Apollo
 
Ich zwar etwas Off-Topic, aber: Muss es Apollo sein.

Selbst haben wir (mit älteren Versionen) katastrophale Erfahrungen und wenn Du diesen aktuellen Vergleich anschaust kommt Apollo auch nicht gut weg.

Sourcemaker 13. Dez 2005 10:04

Re: dBase Datenbank dauerhaft verbinden mit Apollo
 
Hi,

Du mußt doch bloß die Datenbank vor Deiner while-Schleife öffnen.

Delphi-Quellcode:
//Datenbanken testen
procedure TForm1.DBtestID(Node: TdomNode);
var
  Elem: TDomElement;
  id: String;
begin
  ApolloTable1.Active:= True;
  if (node.nodeName = 'XX') then begin
  elem:= node.findFirstChildElement;
    while (elem <> nil) do begin
      if (Elem.nodeName = 'unterknoten') then begin
        id:= elem.getAttributeLiteralValue('id');
        id:= RightStr(id,length(id)-6);
        Elem:= elem.findNextSiblingElement;
        TestID(id); //aufruf der proedure TestDB
      end;
    end;
  end;
  ApolloTable1.Active:= false;
end;

//Öffnet eine DB und prüft ob ID in DB vorhanden ist und gibt die falsche ID aus
procedure TForm1.TestID(id: String);
var
  test: String;
begin
  ApolloTable1.Filtered:= False;
  ApolloTable1.Filter:= 'id= ' + queryEncode(id, 16);
  ApolloTable1.Filtered:= True;
  test:= ApolloTable1.FieldByName('wort').AsString;
  if (test = '') then begin
    Label1.Caption:= 'zu folgenden ID´s existieren keine Einträge';
    ListBox1.Items.Append(id)
    end;
end;
Ist die Table indiziert ? Wenn ja ist ein Seek wesentlich schneller als ein Filter.

Gruß

Frank

verrückter 13. Dez 2005 10:17

Re: dBase Datenbank dauerhaft verbinden mit Apollo
 
hi

erst mal danke für die Lösung. Habs gestern noch hin bekommen und zwar hab ich die öffnen funktion der DB auf die erste Buttonclick funktion gelegt, sodass der user sobald er die XML datei öffnet auch automiatisch die entsprechende DB öffnet und mit dem schließen Button sie danach wieder disconnected.
Die Tabelle ist nicht indiziert. Aber so groß ist die DB nicht dass es auswirkungen auf die Laufzeit hat... hoff ich mal :-D

Gruß

verrückter

Sourcemaker 13. Dez 2005 10:26

Re: dBase Datenbank dauerhaft verbinden mit Apollo
 
Wenn die Datenbank nicht gleichzeitig für andere zur Verfügung stehen muß
besteht auch noch die Möglichkeit sie exclusiv zu öffnen was eine Menge an
Geschwindigkeit ausmacht.

Gruß

Frank

verrückter 13. Dez 2005 10:32

Re: dBase Datenbank dauerhaft verbinden mit Apollo
 
Hab gerade eine anderes Problem vielleicht kannst Du mir ja da schnell nen ansatz geben:-) bin dabei einen String aus einer Stringliste zu suchen wie geh ich da ran ??. For schleife über die Länge der der Stringlist?? und dann mit .pos??

Bernhard Geyer 13. Dez 2005 10:35

Re: dBase Datenbank dauerhaft verbinden mit Apollo
 
Zitat:

Zitat von verrückter
Hab gerade eine anderes Problem vielleicht kannst Du mir ja da schnell nen ansatz geben:-) bin dabei einen String aus einer Stringliste zu suchen wie geh ich da ran ??. For schleife über die Länge der der Stringlist?? und dann mit .pos??

:warn: Neue Frage -> Neuer Thread.
Suchst Du kompletten Eintrag in String-Liste?

Sourcemaker 13. Dez 2005 10:36

Re: dBase Datenbank dauerhaft verbinden mit Apollo
 
Schau mal in die Hilfe bei TStringList und die Function IndexOf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 Uhr.

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