AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi dBase Datenbank dauerhaft verbinden mit Apollo
Thema durchsuchen
Ansicht
Themen-Optionen

dBase Datenbank dauerhaft verbinden mit Apollo

Offene Frage von "verrückter"
Ein Thema von verrückter · begonnen am 12. Dez 2005 · letzter Beitrag vom 13. Dez 2005
Antwort Antwort
verrückter

Registriert seit: 18. Nov 2005
5 Beiträge
 
#1

dBase Datenbank dauerhaft verbinden mit Apollo

  Alt 12. Dez 2005, 10:05
Datenbank: DBase • Version: xx • Zugriff über: Apollo 6.1
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: dBase Datenbank dauerhaft verbinden mit Apollo

  Alt 12. Dez 2005, 11:01
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: dBase Datenbank dauerhaft verbinden mit Apollo

  Alt 13. Dez 2005, 11:04
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
Frank
  Mit Zitat antworten Zitat
verrückter

Registriert seit: 18. Nov 2005
5 Beiträge
 
#4

Re: dBase Datenbank dauerhaft verbinden mit Apollo

  Alt 13. Dez 2005, 11:17
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

Gruß

verrückter
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: dBase Datenbank dauerhaft verbinden mit Apollo

  Alt 13. Dez 2005, 11:26
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
Frank
  Mit Zitat antworten Zitat
verrückter

Registriert seit: 18. Nov 2005
5 Beiträge
 
#6

Re: dBase Datenbank dauerhaft verbinden mit Apollo

  Alt 13. Dez 2005, 11:32
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??
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: dBase Datenbank dauerhaft verbinden mit Apollo

  Alt 13. Dez 2005, 11:35
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??
Neue Frage -> Neuer Thread.
Suchst Du kompletten Eintrag in String-Liste?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sourcemaker
Sourcemaker

Registriert seit: 3. Sep 2003
Ort: Westoverledingen
264 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: dBase Datenbank dauerhaft verbinden mit Apollo

  Alt 13. Dez 2005, 11:36
Schau mal in die Hilfe bei TStringList und die Function IndexOf.
Frank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:00 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