Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Antworten
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 217
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 53 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von dtmackenzie »

Nur ein paar einfache Funktionen die ich immer benutze um SELECT-Befehle als String auszuführen und Ergebnisse zu holen...
Die erste 2 liefern die Ergebnisse in aResult zurück, sonst sollte alles selbsterklärend sein, glaube ich.
Vielleicht nützlich für die, die gerade mit Postgres anfangen.

Der akt. Code liegt nun in der Wissensbasis:
https://www.xbaseforum.de/viewtopic.php ... 34#p142734
Zuletzt geändert von dtmackenzie am Mo, 08. Aug 2022 14:19, insgesamt 1-mal geändert.
Viele Grüße,
David
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15550
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 38 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von brandelh »

das wäre was für die Wissensbasis
Gruß
Hubert
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 612
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 24 Mal
Danksagung erhalten: 107 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von Marcus Herz »

Ich würde, wenn ich es schon neu aufsetze, immer Array mit Dataobjects zurückgeben, vor allem wenn ich mal mehr Felder verwende, dann komm ich mit Arraypositionen schnell ans Limit der Lesbarkeit
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 217
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 53 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von dtmackenzie »

Hallo Hubert,
wie ginge das am Besten, mit Verknüpfung?

Hallo Marcus,
ich habe nicht viel mit Dataobjects gearbeitet, aber ich glaube zu verstehen, was Du meinst. Schöne Idee, da hast Du Recht, es wäre doch viel besser, mit Feldnamen anstatt Arraypositionen zu arbeiten. Aber was kommt denn als Feldname wenn man eine berechnete Spalte im SELECT hat?
Viele Grüße,
David
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 612
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 24 Mal
Danksagung erhalten: 107 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von Marcus Herz »

Du kannst der berechneten Spalte einen Feldnamen geben:

Code: Alles auswählen

select max(irgndwas) as maxfeld from ...
dann heisst die Spalte maxfeld
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 217
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 53 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von dtmackenzie »

Das ist super, genauso wie ich es mir erhofft hätte, Danke Marcus!
Ich probiere das mal aus...
Viele Grüße,
David
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14381
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 19 Mal
Danksagung erhalten: 57 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von Jan »

Xbase++ hat das SELECT um ein "INTO objecs" erweitert. Damit wird das Ergebnis des SELECT in ein Array geschrieben, dessen Sätze DataObjects mit den Satzinhalten und den Feldnamen sind. Klappt zumindest auf dbf ganz hervorragend. Nur leider etwas langsam. Wie das auf SQL wäre (wo ich ja letztendlich hin will) habe ich noch nicht getestet.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 217
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 53 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von dtmackenzie »

Hallo Jan,
Du meinst damit "Universal SQL" mit SELECT direkt im Code geschrieben?
Hat auch Charme, aber ich benutze nur "Pass-Through SQL" mit SELECT als String, ist ja flexibler.
Nur "roh" ist es ziemlich unlesbar im Vergleich, deshalb diese Wrapper-Funktionen.
Diese Funktion wäre also das von Marcus angeregte Äquivalent zum von Dir vorgeschlagenen SELECT... INTO...

Code: Alles auswählen

***************
PROC AOSelect(aResult, cSelect)
// Array of DataObjects from SQL SELECT
LOCAL nWA:=SELECT(), oStmt1:=DacSqlStatement():fromChar(cSelect)

ASIZE(aResult, 0)

// USQL_RESULT_ARRAY funktioniert nicht?
oStmt1:build():query(USQL_RESULT_WORKAREA, "ASelWA")
DBEVAL({|| AADD(aResult, ScatterIntoDataObject())})
CLOSE ASelWA

SELECT (nWA)
RETURN


***************
FUNC ScatterIntoDataObject()
LOCAL oDO
SCATTER NAME oDO
RETURN oDO
P.S. Ich weiß nicht, ob es eine Standard-Funktion wie ScatterIntoDataObject() gibt - habe ich aber nicht in der Hilfe gefunden, auch nicht die in AASelect() benutzte Funktion Scatter(), die jemand mir irgendwann netterweise verraten hat...
Viele Grüße,
David
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14381
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 19 Mal
Danksagung erhalten: 57 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von Jan »

David,

es gibt natürlich ein SCATTER, und dazu passend das GATHER. Ein

Code: Alles auswählen

Scatter Name oData
schreibt den aktuellen Satz der aktuellen Workarea in ein DataObject. Schau Dir mal die Hilfe dazu an, es gibt diverse Parameter um das zu steuern. Wie welche Felder, welche Workarea, usw.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 217
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 53 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von dtmackenzie »

Jan,

ja, ich weiß, SCATTER NAME benutze ich schon in ScatterIntoDataObject()!

Es ging mir darum, ob es dies als Funktion anstatt als Befehl gibt, damit ich sie einfach im DBEVAL()-Codeblock benutzen kann.
Viele Grüße,
David
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 612
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 24 Mal
Danksagung erhalten: 107 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von Marcus Herz »

Code: Alles auswählen

#command SCATTER NAME <foo> [IN <ncWorkarea>] [<add:ADDITIVE>] => _scatterObject(  nil , @<foo>, <(ncWorkarea)>, [<.add.>]  )
Aber es ist überhaupt keine gute Idee, das als Funktion in dbeval zu schreiben. Da ist die Wrapper funktion sinnvoller
Gruß Marcus

Es gibt keine Grenzen, aber du kannst welche ziehen.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15550
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 38 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von brandelh »

dtmackenzie hat geschrieben: Di, 02. Aug 2022 13:32 Hallo Hubert,
wie ginge das am Besten, mit Verknüpfung?
da gibt es keine festen Vorschriften, aber ich mache das so, dass ich im ersten Beitrag - versuche - alle nötigen Infos zu Zweck und Inhalt, sowie genug Suchbegriffe ganz am Ende aufzunehmen.
Dann hänge ich die ZIP an, bei kleinen Texten kann man die auch einfach per Code Tag rein hängen.
Also im Prinzip dein erster Beitrag mit Ergänzungen, die können natürlich auch von anderen angehängt werden, aber Diskussionen sollte man in der Wissensbasis nach einer gewissen Zeit löschen.

Ich schreibe immer rein, dass die neueste ZIP immer im ersten Beitrag steht, und tausche die alten gegen neue aus.
Die Infos über die neue Version wird aber als normaler Beitrag angehängt, sonst sieht es keiner ;-)

Man könnte natürlich auch LINKS auf z.B. hier setzen, aber viele übersehen bei den vielen Diskussionsbeiträgen (hier ja durchaus erwünscht) leicht die wichtigen Ergebnisse.
Gruß
Hubert
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 217
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Hat sich bedankt: 53 Mal
Danksagung erhalten: 16 Mal
Kontaktdaten:

Re: Einfache Wrapper-Funktionen für SQL SELECT-Befehle

Beitrag von dtmackenzie »

Hallo Hubert,

ist erstmal gemacht, habe im Moment leider wenig Zeit für Ergänzungen (stehe kurz vor Urlaub)...
Ich habe AASelect() entfernt, die von Marcus angeregte AOSelect() ist viel lesbarer im Gebrauch, also sehe ich keinen Bedarf mehr für AASelect(), wäre eher schlechte Praxis.
Viele Grüße,
David
Antworten