Seite 1 von 1

Universal SQL [ERLEDIGT]

Verfasst: Do, 23. Aug 2018 9:12
von Manfred
Hi,
ich wollte gerade einmal das Beispiel von Steffen auf Youtube bzgl. dataobject im Zusammenhang mit SQl Befehlen ausprobieren. Muß man da eine zauberformel sprechen, oder irgendwas noch mit einbinden? Wenn ich diesen Befehl eintippe

Code: Alles auswählen

SELECT field1 AS name, field2 AS size FROM (Directory()) INTO objects adirectory 
und dann kompiliere, erscheint diese Fehlermeldung
[Fehler] : error ALK2102: unresolved external symbol USQLSTATEMENT
was mache ich falsch?

Re: Universal SQL

Verfasst: Do, 23. Aug 2018 9:18
von Jan
Manfred,

bindest Du die ADAC20B.lib ein?

Jan

Re: Universal SQL

Verfasst: Do, 23. Aug 2018 9:24
von Manfred
:oops: Dachte ich mir doch, das da was fehlt.
Komisch, es klappt aber trotzdem nur, wenn man den Code fest verdrahtet. Auf der Eingabezeile in der WB klappt es trotzdem nicht.

Re: Universal SQL [ERLEDIGT]

Verfasst: Do, 23. Aug 2018 9:44
von brandelh
Aber der Befehl sieht ja sehr interessant aus ...

Re: Universal SQL [ERLEDIGT]

Verfasst: Do, 23. Aug 2018 10:13
von Tom
Ja, Hubert. Das ist sehr cool, ziemlich performant - und es spart eine irre Menge Code. Aber es ist wie mit vielen anderen Fortschritten: Man muss sich einmal die Zeit nehmen, das auszuprobieren und im eigenen Code zu reflektieren.

Als ich Boris' Xb2.Net gekauft habe, da gab es schon SQLexpress von ihm, habe ich sein "TimeClock"-Beispiel verwendet, um ein kleines Web-Frontend zu unserer App zu bauen. Schon damals stand im Code für die Aufbereitung/Anzeige von ISAM-Tabellen "This would be so much easier with SQL" als Kommentar von Boris. Ich habe diese Anwendung kürzlich aufgefrischt und hier und da umgestellt. Und Boris hatte schon damals recht. Ich weiß nicht, von wann der Kommentar ursprünglich stammt, nehme aber an, dass es so um 2005 herum gewesen sein wird.

Der Code für die Erhebung und Aufbereitung der Tabellendaten hat sich auf knapp 15% reduziert.

Re: Universal SQL [ERLEDIGT]

Verfasst: Do, 23. Aug 2018 13:28
von Werner_Bayern
Tom hat geschrieben: Do, 23. Aug 2018 10:13 Der Code für die Erhebung und Aufbereitung der Tabellendaten hat sich auf knapp 15% reduziert.
Kann ich bestätigen. Jetzt nur noch ein select-Statement, was vorher teilweise viele Programmzeilen erforderte. Die Möglichkeiten mit LEFT JOIN etc. sind schon enorm. Und rasend schnell! Auswertungen, die früher mit dbf bis zu mehrere Minuten dauerten, sind mittels SQL innerhalb Sekunden fertig. Und das meist ohne extra SQL-Index. Wird's zu langsam, wird einfach an den PostgreSQL-Parametern geschraubt, oder ein Index drüber gelegt. Keine einzige Zeile Code muss dafür geändert werden.

Abgesehen von den offenen PDRs zur PGDBE (wir arbeiten dran :wink:) macht es Spass.

Re: Universal SQL [ERLEDIGT]

Verfasst: Mo, 03. Sep 2018 19:11
von Manfred
Hm,
da klappt aber was nicht richtig. Wenn man den Select Befehl auf ein Verzeichnis macht, in dem es die Dateien nicht gibt und man ein leeres Array zurückbekommt, dann knallt es im Karton.
fehler.PNG
fehler.PNG (30.28 KiB) 14345 mal betrachtet

Re: Universal SQL [ERLEDIGT]

Verfasst: Mo, 03. Sep 2018 22:36
von Lewi
Das es "knallt" ist doch logisch. "From" erwartet ein Litaral und bei Bedarf zuzüglich den Alias-Namen der Tabelle. Einzelne Tabellen werden durch Kommatas getrennt.

Re: Universal SQL [ERLEDIGT]

Verfasst: Di, 04. Sep 2018 0:12
von AUGE_OHR
Manfred hat geschrieben: Mo, 03. Sep 2018 19:11 ... auf ein Verzeichnis macht, in dem es die Dateien nicht gibt und man ein leeres Array zurückbekommt, dann knallt es im
es gibt kein Unterschied zur "alten" Methode

Code: Alles auswählen

LOCAL aDir := DIRECTORY("Gib_es_nicht_File.DBF")

   oQB := XbpQuickBrowse():new(oDlg:drawingArea,,{2,2}, aSize)
   oQB:dataLink := DacPagedDataStore():new( aDir, {1,2,3,4} )
   oQB:create()
wenn das File nicht vorhanden ist und ein leeres Array als Resultat übergeben wird dann knallt das auch in meinem Beispiel.

DIRECTORY() als Beispiel ist natürlich sehr simple aber es erstaunt mich auch denn es ist ja eine Xbase++ Function "inside". üblicherweise kann man in einem SELECT nur "interne" Function nutzen die der entsprechende SQL Server hat.

p.s. wie sieht so ein Universal SQL Code als PPO aus :?:

Re: Universal SQL [ERLEDIGT]

Verfasst: Di, 04. Sep 2018 8:38
von Manfred
USqlStatement():New():Select( {{"field1", "name"}} ):From( {{Directory(cDatei), "Directory(cDatei)"}} ):Build():Query( 4, @adirectory )

Re: Universal SQL [ERLEDIGT]

Verfasst: Mi, 05. Sep 2018 7:52
von Manfred
PDR 7039

Re: Universal SQL [ERLEDIGT]

Verfasst: Mo, 08. Okt 2018 15:14
von Manfred
wenn man das Ergebnis in eine Membervar schreiben will, dann meckert schon der Compiler.

Code: Alles auswählen

SELECT field1 AS name FROM (Directory(cDatei)) INTO objects ::aPdf
fehler.PNG
fehler.PNG (2.9 KiB) 13645 mal betrachtet

Re: Universal SQL [ERLEDIGT]

Verfasst: Di, 09. Okt 2018 14:11
von Manfred
ich habe derzeit wohl ein Händchen dafür.

http://www.alaska-software.com/scripts/ ... PDRID=7053

Re: Universal SQL [ERLEDIGT]

Verfasst: Di, 09. Okt 2018 22:08
von Wolfgang Ciriack
.. aber wenigstens auch eine Lösung dafür :D

Re: Universal SQL [ERLEDIGT]

Verfasst: Mi, 10. Okt 2018 7:30
von Manfred
ja stimmt. Mit self klappt es

Re: Universal SQL [ERLEDIGT]

Verfasst: Mo, 25. Nov 2019 16:17
von Manfred
und sowas klappt hier auch.

Code: Alles auswählen

LOCAL aJahre         := {}
       LOCAL aVerzeichnisse := {}
       LOCAL cVerzeichnis   := oSysPAra:doParaWs:datenbestand + "jahresabschluss\*"

       MEMVAR oSysPara

       aVerzeichnisse := Directory(cVerzeichnis,"D")                            // nur Directories der Jahre
       IF Len(aVerzeichnisse) > 0
          SELECT field1 AS name FROM (aVerzeichnisse) WHERE field1 <> "." .AND. field1 <> ".." INTO objects aJahre
       ENDIF
nur mal so erwähnt. Ich glaube langsam es wird Zeit sich mehr und näher damit zu beschäftigen....