Autor Beitrag
Josef-B
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Fr 18.04.03 14:42 
Jetzt hab ich das nächste Problem.

Ich habe Dateien, die ursprünglich aus einer ACU-Cobol Anwendung stammen. Der Aufruf funktioniert über TQuery über ODBC.

Mit Tquery kann ich diese Daten auch z.B. über ein TGRID anzeigen.

Wie funktioniert der Export einer Datei. (KUNDEN) nach Interbase?

Geht es über:

SELECT * into KUNDEN in ???????? from KUNDEN

Wenn ja, wie heißt dann das Ziel (???????). Ich habe verschiedene Schreibweisen ausprobiert, bisher hat es aber nicht geklappt. Ich wäre für die richtige Syntax sehr dankbar, dann habe ich glaub ich das gröbste geschafft.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 18.04.03 19:05 
Josef-B hat folgendes geschrieben:
...Ich habe Dateien, die ursprünglich aus einer ACU-Cobol Anwendung stammen. Der Aufruf funktioniert über TQuery über ODBC...Wie funktioniert der Export einer Datei. (KUNDEN) nach Interbase?
....

Ich gebe Dir einen Tip: schreibe das alles Zeile für Zeile in eine Textdatei und füge das dann in die Interbase-DB ein. Hier kennt sich wohl keiner mit Cobol aus.

_________________
Gruß
Hansa
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Fr 18.04.03 20:16 
Titel: Acu Cobol ist nicht das Problem oder?
Ich denke mal Acu Cobol ist nicht das Problem, oder?

die Quelldaten kann ich ja mit einem einfachen SQL Befehl über TQuery abrufen.

z.B. wie gesagt in eine DBGrid.

Kann ich dann die Daten mit einem SQL Befehl in eine Textdatei schreiben?

Ich habe das Buch Datenbankprogrammierung von Kowalski. Die dort angegbenen SQL Befehle wie zb.

Select * into KUNDEN IN 'C:\' 'TEXT' from KUNDEN funktionieren nicht, da kommt immer die Meldung Syntax Fehler.

Hingegen SELECT * FROM KUNDEN funktioniert optimal.

Woran kann das denn liegen? Man braucht schon viel Geduld für Delphi.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 18.04.03 20:32 
Ich glaube Du verwechselst irgendwie SQl mit Interbase. IB ist ein SQL-DBMS, aber wo kommen die Cobol-Daten denn da her ? Mit Paradox kann ich auch gewisse SQL-Sachen machen. Aber nicht mir nix dir nix auf eine Interbase-DB zugreifen. Schmeiß Feld für Feld jedes Datensatzes in eine Zeile einer Textdatei, von Cobol her. Dann ist das sauber. Diese Textdatei benutzt Du dann um die Daten wieder, allerdings mit Delphi in die IB-DB zu schreiben.

user defined image Hi LCS.

_________________
Gruß
Hansa
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Fr 18.04.03 20:47 
Titel: Ich kann gar kein Cobol das geht über ne ODBC Schnittstelle
Hi

über Cobol kann ich gar nicht programmieren. Das ist so, wir haben eine
Betriebssoftware, die ist in Cobol geschrieben.

Die Datendateien kann man aber über ACU ODBC in Tabellen darstellen, über einen entsprechend installierten ODBC Treiber. Auf diese Tabellen habe ich wie gesagt auch über Delphi Zugriff. Allerdings nur lesen und nicht schreiben

Ich möchte eben diese Daten in eine Interbase Datenbank importieren.
hwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91

Win98 SE, Win2000
D5 Prof
BeitragVerfasst: Sa 19.04.03 06:54 
Dann machs doch in 2 Schritten:
Ein Datensatz der ACU-Tabelle in Variablen und dann erst in die Interbase-Tabelle einfügen.
Nächster Datensatz bis EOF.

! Manchmal muß man eine kleine Pause nach jedem Datensatz einfügen !

hwb
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Sa 19.04.03 07:51 
hallo hwb,

kannst DU das noch etwas genauer erklären?

ich bin bei Delphi noch ziemlich neu.
hwb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 91

Win98 SE, Win2000
D5 Prof
BeitragVerfasst: Sa 19.04.03 10:28 
So zum Mitschreiben:
ACU-Table: Select * from Tabelle;

Damit du sicher bist, wie die Feldwerte aussehen kanst du mit persistinenten Feldern arbeiten. Also Doppelklick auf Query. Damit geht der Feldeditor auf. Alle Felder hinzufügen. Jetzt kannst du jedes Feld als Objekt ansprechen. Im Objektinspektor kannst du auch auslesen was das für ein Feld ist ( String, Integer usw ). Dann deklarierst du zu jeden Feld eine Variable.
Damit kannst du die Tabelle in eine Variable auslesen:
Query1Feldname.Value := Variable;

Die Var dann in die Interbase speichern.

Und das ganze noch einer Schleife bis Query.EOF.

Das wars.

HWB
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Sa 19.04.03 13:34 
Hi Josef-B
hansa hat folgendes geschrieben:

Hier kennt sich wohl keiner mit Cobol aus.

Das halte ich aber für ein Gerücht. :mrgreen: Ich bin immer noch MF Cobol auf meinem PC.

hwb hat folgendes geschrieben:

Damit du sicher bist, wie die Feldwerte aussehen kanst du mit persistinenten Feldern arbeiten. Also Doppelklick auf Query. Damit geht der Feldeditor auf. Alle Felder hinzufügen. Jetzt kannst du jedes Feld als Objekt ansprechen. Im Objektinspektor kannst du auch auslesen was das für ein Feld ist ( String, Integer usw ). Dann deklarierst du zu jeden Feld eine Variable.

Für's erste brauchst du das gar net so kompliziert machen. Wenn du über den ODBC-Treiber auf die Tabelle zugreifen kannst, ist das schon die halbe Miete. Ich geh mal davon aus, dass dir die Tabellenstruktur bekannt ist.
Also musst du zuerst mal in deiner IB-Datenbank eine Tabelle mit einer passenden Struktur anlegen. Dann wie schon beschrieben
- Cobol-Tabelle öffnen
- IB-Tabelle öffnen
- Schleife bis EOF
- Satz lesen
- IB Satz einfügen
- Felder übertragen mit
IBTable.Fields[x].Value := CobolTable.Fields[x].Value
- IB Satz speichern.
- Ende

Wenn du in beiden Tabellen eine identische Struktur hast kannst du die Übertragung der Feldinhalte in einer Schleife machen:
ausblenden Quelltext
1:
2:
3:
for i := 0 to CobolTable.Fields.Count -1 do
  if not CobolTable.Fields[i].IsNull then
     IBTable.Fields[i].Value := CobolTable.Fields[i].Value;


Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Josef-B Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 293

2003 Server, Win7, Win8
Delphi 2010 Pro, Firebird 2.5
BeitragVerfasst: Mo 21.04.03 16:43 
Titel: HAT GEKPLAPPT
Es hat geklappt mit der Übernahme. Allerdings musste ich es doch mit den persistinensischen Feldern machen, weil er das fieldscount nicht ausführen konnte in der Ursprungsdatenbank, die ja eigentlich keine ist.

Danke.