Autor Beitrag
BrixxtoN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

Win 7 64bit
Delphi 2010 Enterprise
BeitragVerfasst: Di 24.08.10 18:10 
Hallo,

ich muss Daten aus dBase-Datenbank importieren.
Das Problem ist das der import über mehrere Geschäftsjahre laufen muss und die Geschäftsjahre sind durch verzeichnise getrennt.

GJ 2010 verzeichnis c:\Programme\Programname\db\20100
GJ 2009 verzeichnis c:\Programme\Programname\db\20090
GJ 2008 verzeichnis c:\Programme\Programname\db\20080


Denn zugriff mach ich über ODBC und ADO was auch so weit funktioniert bis ich die Datenbank-Pfade wechseln will.

Kann mir jemand sagen was an diesem Code falsch ist:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
for I := Low(pfade) to High(pfade) do
  begin
  ADOQuery1.Close;
  ADOQuery1.Connection.Close;
  ADOQuery1.Connection.DefaultDatabase := pfade[i];
  ADOQuery1.Connection.open;
  ADOQuery1.Open;

  setLength(SearchStrings, 1);
  SearchStrings[0] := 'bel_nr';
  MODatenImport(ADOQuery1, ADOQuery1, SQLQuery1, 'Rechnung''Rechnungen''',
    '''''''', SearchStrings);
  end;
Der pfade Array ist ein array of string (TStringDynArray) und es sind verschiedene Datenbanken-Pfade im Array.

Bei erstem durchlauf funktioniert der Code.
Bei zweitem durchlauf auch, nur der Pfand wird nicht geändert.

Wenn ich direkt danach eine ausgabe von ADOQuery.Connection.DefaultDatabase mache, wird der richtige verzeichnis angezeigt.

Form1.RibbonStatusBar.Panels[0].Text := ADOQuery.Connection.DefaultDatabase;

Gruss

Marijo

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 24.08.10 22:25 
user profile iconBrixxtoN hat folgendes geschrieben Zum zitierten Posting springen:
Bei erstem durchlauf funktioniert der Code.
Bei zweitem durchlauf auch, nur der Pfand wird nicht geändert.

Wenn ich direkt danach eine ausgabe von ADOQuery.Connection.DefaultDatabase mache, wird der richtige verzeichnis angezeigt.
Für mich sieht das so aus, als würde da ein Delay bzw. Application.ProcessMessages fehlen.
BrixxtoN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

Win 7 64bit
Delphi 2010 Enterprise
BeitragVerfasst: Di 24.08.10 22:35 
Das hab ich jetzt nicht verstanden.

Was hat ADOQuery1.Connection.DefaultDatabase mit Application.ProcessMessages zutun?

Gruss

Marijo
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Di 24.08.10 22:47 
user profile iconBrixxtoN hat folgendes geschrieben Zum zitierten Posting springen:
Das hab ich jetzt nicht verstanden.

Was hat ADOQuery1.Connection.DefaultDatabase mit Application.ProcessMessages zutun?

Wenn der Pfad bei der Ausführung nicht gesetzt ist, danach aber schon, dann sieht es für mich so aus, als wenn an der Stelle Zeit gebraucht wird, um die Änderung zu verarbeiten.
BrixxtoN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

Win 7 64bit
Delphi 2010 Enterprise
BeitragVerfasst: Di 24.08.10 23:26 
Das dachte ich mir auch. Aber sleep(5000) hat nicht geholfen.

Gruss

Marijo

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Habe grad das getestet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure Delay(msec: Longint);
var
  start, stop: Longint;
begin
  start := GetTickCount;
  repeat
    stop := GetTickCount;
    Application.ProcessMessages;
  until (stop - start) >= msec;
end;


Es hat leider nicht geholfen.

Gruss

Marijo
BrixxtoN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50

Win 7 64bit
Delphi 2010 Enterprise
BeitragVerfasst: Di 31.08.10 10:17 
Da es mit ADOQuery1.Connection.DefaultDatabase nicht funktioniert, hab das anders gelöst.

Ich erstelle vorher verschiedene ODBC-Verbindungen (für jedes GJ 1) und wechsel dann die ODBC-Verbindungen.