Seite 2 von 4

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 11:54
von Marcus Herz
Es muss ein Share, Verzeichnis des ADS Server sein. Läuft der auf \\samba42x ? Eher nicht. Vorher dorthin kopieren, du machst ja eh eine...

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 11:56
von Manfred
und deshalb wollte ich es so machen, wie eingangs erwähnt. Das hätte keine Probleme mit den ganzen Pfaden gegeben.
dann werde ich es mal versuchen.

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 12:22
von nightcrawler
Du kopierst die DBF doch in den Datenpfad ... dann nimm am besten relativen Pfad zum Dicitonary. Den Namen musst Du angeben, weil die phys Datei 'tabelle1.dbf' im Dicitonary auch als 'buh' angesprochen werden kann - so Du es willst.

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 12:24
von Manfred
ich habe alles per ARC schonmal getestet und es klappt. Jetzt baue ich es ins fertige Programm.

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 14:33
von Manfred
nightcrawler hat geschrieben: Fr, 30. Okt 2020 9:33

Code: Alles auswählen

merge tabelle2 t2 using tabelle1 t1
on (t2.id=t1.id)
When not matched then insert values(t1.id, t1.text)
damit wird immer alles von Tabelle1 nach Tabelle2 übertragen, was noch nicht drinsteht
müssen denn Ziel und Start Dateistrukturen übereinstimmen? Kann man nicht nur bestimmte Spalten füllen und den rest nicht beachten?

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 15:34
von HaPe

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 15:49
von Manfred
die Anleitung habe ich schon gelesen,

Code: Alles auswählen

MERGE tankbuch tb USING tbuch1_kopie tbk
ON (tbk.kfznr=tb.kfznr AND tbk.tankdatum=tb.tankdatum AND tbk.tankzeit=tb.tankzeit)
WHEN NOT MATCHED THEN INSERT VALUES(tbk.art, tbk.kfznr, tbk.kmstand,tbk.menge, tbk.persnr,tbk.tankdatum, tbk.tankzeit, tbk.terminalnr)
ERROR IN SCRIPT: poQuery: Error 7200: AQE Error: State = S0000; NativeError = 2124; [SAP][Advantage SQL Engine]Invalid operand for operator: <assignment> Target Data Type: <Date> Source Data Type: <Numeric> Target Name: BUCHDATUM -- Location of error in the SQL statement is: 199 (line: 3
column: 74)
Ich weiß nur nicht was der Fehler mir sagen will. Die Datentypen sind bei beiden gleich. Außer die reihenfolge paßt nicht. Also es muß alles 1zu1 und ohne Ausnahme übergeben werden. Das erkenne ich aber nicht in der Anleitung. Der Cursur steht dann auf tbk.menge

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 15:53
von brandelh
Mann kann sich auch ins Knie bohren :-)

ein einfaches skippen in der DBF mit UPDATE/INSERT Statement scheint mir da doch viel einfacher 8)

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 15:58
von Manfred
Hi Hubert,
auf wen war das jetzt bezogen?

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 16:06
von HaPe
Wie wärs mit einer Feldliste zwischen dem INSERT und den VALUES?
... then insert (Feld1, Feld2) values(t1.id, t1.text)

Das sollte SQL-Standard sein.

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 16:11
von Manfred
alles schon ausprobiert, dann kommen andere Fehlermeldungen. Ich glaube langsam ich mache das so wie anfänglich geplant. Das erscheint mir doch alles sehr viel problemloser zu gehen.

Re: suchen und anhängen

Verfasst: Fr, 30. Okt 2020 16:15
von brandelh
Manfred hat geschrieben: Fr, 30. Okt 2020 15:58 Hi Hubert,
auf wen war das jetzt bezogen?
na auf die Vorgehensweise eine DBF per einem SQL Befehl mit einer anderen abzugleichen ;-)

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 9:30
von nightcrawler
Manfred hat geschrieben: Fr, 30. Okt 2020 16:11 alles schon ausprobiert, dann kommen andere Fehlermeldungen.
HaPe hat schon recht. Wenn Du uns die Fehlermeldung nennst, dann können wir spezifisch auf das Problem eingehen.

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 9:39
von Manfred
Joachim,
Du machst mich fertig. Ich habe immer die Meldungen gepostet dazu.....

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 9:43
von nightcrawler
sorry, zu schnell geantwortet, zu wenig gelesen. Natürlich muss die Reihenfolge übereinstimmen - woher soll denn sonst der ADS wissen, was Du wo einfügen willst? Du kannst schliesslich auch feste Werte, Rückgabe von Funktionen, ganz andere Felder usw als Werte übergeben und musst dann sagen, wohin das soll.

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 13:09
von Manfred
Nein,
mit Reihenfolge meinte ich nicht die Reihenfolge Felder und Values, sondern Felder wie sie in der Tabelle stehen. Es muß doch nicht jedes Feld angegeben werden, was vorhanden ist, oder?

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 15:49
von HaPe
Es muß doch nicht jedes Feld angegeben werden, was vorhanden ist, oder?
Nein, aber die Reihenfolge der Feldliste muss zu den Werten/dem Datentyp passen den du in der VALUE-Klausel angibst.

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 15:52
von Manfred
das habe ich beachtet. Zumal mir die meldung auf eine ganz andere Spalte verweist, die überhaupt nicht angefaßt wird. "Buchdatum".

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 16:37
von HaPe
Hallo Manfred !

Code: Alles auswählen

MERGE tankbuch tb USING tbuch1_kopie tbk
ON (tbk.kfznr=tb.kfznr AND tbk.tankdatum=tb.tankdatum AND tbk.tankzeit=tb.tankzeit)
WHEN NOT MATCHED THEN INSERT VALUES(tbk.art, tbk.kfznr, tbk.kmstand,tbk.menge, tbk.persnr,tbk.tankdatum, tbk.tankzeit, tbk.terminalnr
Entweder stehe ich auf dem Schlauch oder du. :roll:
Wo ist in deinem obigen Code die Feldliste vor dem VALUES?

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 17:20
von Manfred
Hi HaPe,
weder Du noch ich. Aber ich glaube ich muß mal die Drogen wechseln. Ich weiß nicht was ich da gestern programmiert habe, aber ich habe gerade nochmal alles fein säuberlich eingetippt (auch die Feldliste) und auf einmal klappt es im Architekten. Aber es dauert doch recht lange bis dieser Vorgang 20000 Datensätze gemerged hat. Kann man das irgendwie beschleunigen mit einem weiteren Index in der Zieldatei, oder so?

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 17:39
von Marcus Herz
Welchen Index gibt es?
kfznr+tankdatun+tankzeit gibts in CDX nicht.
In ADT wäre das:
kfznr;tankdatum;tankzeit

Versuch mal 3 Indices, jeweils auf nur ein Feld

Re: suchen und anhängen

Verfasst: Sa, 31. Okt 2020 19:03
von Manfred
Wieso gibt es den in CDX nicht?

im Moment habe ich nur kfznr. Ich war mir am Anfang noch nicht so sicher, was ich alles benötige. Eigentlich benötige ich den auch nur um von da aus eine Relation aus einer anderen Tabelle rein zu machen zu machen.
Aber wenn wir schon beim Thema sind. Eigentlich habe ich das ja anders auf der Wunschliste. Bei meinem Eingangs gewünschtem Vorschlag wollte ich die Sourcedbf rückwärts durchlaufen, weil es immer nur ein paar Sätze sind, die angehängt werden (der große Druchlauf ist nur einmal von Nöten, am Anfang) Das hat bei der do while Schleife den Vorteil, wenn der erste Satz gefunden wird, dann wird abgebrochen. Jetzt hatte ich zu dem MERGE Befehl auch was gefunden, was man machen kann, wenn der andere Zustand eintritt. Bei mir also, wenn der Satz vorhanden ist und nicht angehängt werden muß. In der Do While Schleife höre ich dann einfach auf und springe raus und Ende. Wenn ich das jetzt mit SQl mache, dann fängt das ja immer von vorne an, oder kann man das auch von hinten durchlaufen lassen und wenn dann der erste Satz erreicht wird, der schon vorhanden wird der SQl Befehl beendet? Wie würde generell ein Abbruch eines SQL Befehls ausehen, wenn die Pflicht mittendrin erfüllt ist?

Re: suchen und anhängen

Verfasst: So, 01. Nov 2020 9:18
von Manfred
au man verdammt, was für ein Tempogewinn. Das haut einen glatt aus den Socken. Nachdem ich den Indexschlüssel erweitert habe, verkürzte sich die MERGE ZEit von 15 Minuten oder so, auf wenige Sekunden. Leck mich fett.

Re: suchen und anhängen

Verfasst: Mo, 11. Jan 2021 10:43
von Manfred
nachdem ich nun den Befehl etwas ergänzt habe

Code: Alles auswählen

IF File(oSysPara:doParaWs:tankbuch_org + "tbuch1.dbf")
            @ nX++,5 Say "Tankbuch vorhanden: " + DToC(Date()) + " " + Time()
            oFahrzeug:kopiere_datei(oSysPara:doParaWs:tankbuch_org + "tbuch1.dbf","e:\tauschverzeichnis\fuhrparkverwaltung\webdienst\tbuch1_kopie.dbf",,.T.)
            TEXT INTO cSQLStmt WRAP Chr(13) TRIMMED
                 EXECUTE PROCEDURE sp_addTableToDatabase('tbuch1_kopie','\tauschverzeichnis\fuhrparkverwaltung\webdienst\tbuch1_kopie',1,2,NULL,NULL)
            ENDTEXT
            oSqlStmt := DC_AdsStatement():new(cSQLStmt,oAdsServer:oSession)
            oSqlStmt:Execute()
            TEXT INTO cSQLSTmt WRAP Chr(13) TRIMMED
                 MERGE tankbuch tb USING tbuch1_kopie tbk
                 ON (tbk.kfznr=tb.kfznr AND tbk.tankdatum=tb.tankdatum AND tbk.tankzeit=tb.tankzeit)
                 WHEN NOT MATCHED THEN INSERT (art, kfznr, kmstand, menge, persnr, tankdatum, tankzeit, terminalnr) VALUES(tbk.art, tbk.kfznr, tbk.kmstand,tbk.menge, tbk.persnr,tbk.tankdatum, tbk.tankzeit, tbk.terminalnr)
            ENDTEXT
            oSqlStmt := DC_AdsStatement():new(cSQLStmt,oAdsServer:oSession)
            oSqlStmt:Execute()
            TEXT INTO cSQLSTmt WRAP Chr(13) TRIMMED
                 DROP TABLE tbuch1_kopie
            ENDTEXT
            oSqlStmt := DC_AdsStatement():new(cSQLStmt,oAdsServer:oSession)
            oSqlStmt:Execute()
         ENDIF
klappt es, wie es aussieht.
ich habe jezt aber nur 1 Problem, Ich kann die Datei tbuch1_dbf nicht löschen. Die ist wohl zu dem Zeitpunkt noch in Benutzung des ADS lt. Architect Remote Server Info. Muß ich noch was tun nach dem Merge?

Re: suchen und anhängen

Verfasst: Mo, 11. Jan 2021 11:52
von Marcus Herz
Wieso nimmst du nicht dein SELECT, welches du fürs Kopieren nach der TEMP Datei benötigdt, nicht als das SELECT in

Code: Alles auswählen

using( select * from ....) kfztemp
Das sprt dir die Zwischendatei