Seite 2 von 3

Re: Architect SQL zu Programm SQL

Verfasst: Mi, 11. Nov 2020 6:43
von Manfred
welchen Code willst Du sehen?

Re: Architect SQL zu Programm SQL

Verfasst: Mi, 11. Nov 2020 20:28
von UliTs
Manfred hat geschrieben: Mi, 11. Nov 2020 6:43 welchen Code willst Du sehen?
? Hier noch einmal der Quellcode, den Bertram veröffentlicht hat:

Code: Alles auswählen

oSession := DacSession():New( cConnect )
oSessionRoger := DC_AdsSession( oSession )
oStmtRoger := DC_AdsStatement():New("SELECT * FROM tabellexyz", oSessionRoger )
cAlias := oStmtRoger:execute()
(cAlias)->(DBGOTOP())
... Mach irgendwas
(cAlias)->(DBCLOSEAREA())
oStmtRoger:close()
oSession:disconnect()
Vor allem die Zeile mit oStmtRoger := DC_AdsSta... würde mich bei Dir interessieren.
Uli

Edit: Syntaxkorrektur vorgenommen

Re: Architect SQL zu Programm SQL

Verfasst: Mi, 11. Nov 2020 20:31
von Manfred
das ist Code von Roger.

Re: Architect SQL zu Programm SQL

Verfasst: Mi, 11. Nov 2020 20:33
von UliTs
Manfred hat geschrieben: Mi, 11. Nov 2020 20:31 das ist Code von Roger.
Ja, natürlich! Hast du es doch anders gemacht?
Dann zeig bitte trotzdem mal die Programmzeile mit dem SQL-Statement.

Re: Architect SQL zu Programm SQL

Verfasst: Mi, 11. Nov 2020 20:35
von Manfred
meinst Du das SQL Statement, in dem ich die Select Abfrage mache?
Ok, dann gehe bitte zurück auf Anfang und lese meinen Eingansgtext, da steht er nämlich drin.

Re: Architect SQL zu Programm SQL

Verfasst: Mi, 11. Nov 2020 22:54
von UliTs
Willst Du mich ärgern?
Das steht in Deinem ersten Beitrag:
Manfred hat geschrieben: Mi, 04. Nov 2020 10:57 Ich haue jetzt erstmal was ganz pauschal hier raus. Mir ist jetzt mehrfach aufgefallen, das ein SQL Script im Architecten funktioniert, aber im Programm untergebracht ein NIL Ergebnis zurückliefert. Was ist das denn jetzt schon wieder?
Aber in Deinem 3.Beitrag steht er drin 8) . Sorry, habe ich übersehen.

Bertram: kannst Du Dein Beispiel mal erweitern und ein "order By Feld1,Feld2" hinzufügen? Funktioniert es dann weiterhin bei Dir?

Re: Architect SQL zu Programm SQL

Verfasst: Do, 12. Nov 2020 6:45
von Manfred
:lol:

Re: Architect SQL zu Programm SQL

Verfasst: Do, 12. Nov 2020 9:35
von Bertram Hansen
UliTs hat geschrieben: Mi, 11. Nov 2020 22:54 Bertram: kannst Du Dein Beispiel mal erweitern und ein "order By Feld1,Feld2" hinzufügen? Funktioniert es dann weiterhin bei Dir?
Uli, ja ODER BY, GROUP BY, etc. das alles funktioniert damit.

Manfred, vielleicht solltest du auch mal im Forum von Roger um Rat fragen.

Hast du den mal probiert diesen SQL-Befehl ohne das Tool von Roger mit den puren Xbase Möglichkeiten aufzurufen.

Code: Alles auswählen

 oStmt  := DacSqlStatement( oSession ):fromChar( "SELECT * FROM tabellexyz" )
Ich weiß ja, dass du das Tool von Roger benutzt, weil ja bei purem Xbase der Fehler mit den offenen Tabellen noch nicht behoben ist.
siehe: viewtopic.php?f=42&t=11632

Re: Architect SQL zu Programm SQL

Verfasst: So, 15. Nov 2020 11:25
von Manfred
OK,
das Problem habe ich erstmal umschifft. Ich arbeite jetzt mit einem VIEW. Das klappt zwar so ohne weiteres nicht mit einem ORDER BY, aber wenn man TOP 1000 z.B. einfügt. dann wird es akzeptiert.

Code: Alles auswählen

CREATE VIEW 
   zeige_letzte_reinigung_view
AS 
   SELECT TOP 5000 fz.kfznr, ra.datumbis,  ra.datumvon,fa.nummer, fa.name, fa.vorname
       FROM fahrzeuge fz
       left JOIN reinigung ra ON fz.id=ra.idfahrzeug
       left JOIN fahrer fa ON ra.nummer=fa.nummer
       WHERE fz.aktiv=true
	   order by fz.kfznr, ra.datumbis dESC;
jetzt muß ich nur schauen, wie ich das mit TOP auf die Reihe bekomme. Es werden ja mit der Zeit mehr Sätze.
Oder weiß einer wie man ORDER BY anders unterbekommt?

Re: Architect SQL zu Programm SQL

Verfasst: So, 15. Nov 2020 13:29
von UliTs

Code: Alles auswählen

Select *
From zeige_letzte_reinigung_view
Order by ...
 

Re: Architect SQL zu Programm SQL

Verfasst: So, 15. Nov 2020 13:30
von Manfred
Uli, jetzt habe ich das Gefühl, das Du mich veralbern willst

Re: Architect SQL zu Programm SQL

Verfasst: So, 15. Nov 2020 13:31
von UliTs
Du nervst...

Re: Architect SQL zu Programm SQL

Verfasst: So, 15. Nov 2020 13:32
von Manfred
Dankend zurück. Was habe ich denn geschrieben? Das Order by über xbase wohl nicht klappt. Ich habe es jetzt direkt auf den Server ausgelagert mittels View und Du schlägst mir wieder vor es mit Xbase zu machen. Wer nervt hier wohl mehr?

Re: Architect SQL zu Programm SQL

Verfasst: So, 15. Nov 2020 17:53
von brandelh
Seid nett zueinander ... es gibt nicht mehr viele von uns ;-)

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 8:50
von Marcus Herz
Ein View kann in der Definition kein ORDER BY enthalten, das ist SQL Standard und hat nichts mit Xbase++ zu tun
Aber man kann beim Abfragen ein ORDER BY anhängen, wie Uli es geschrieben hat

Code: Alles auswählen

SELECT * FROM <view> ORDER BY ...
Alles klar?

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 8:58
von Manfred
er kann ein Order by haben, allerdings muß am Anfang ein TOP stehen. Und wenn ich über Xbase++ wieder ein Order by anhänge, dann habe ich das gleiche Problem wie ohne View, es klappt nicht.

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 9:11
von Manfred
das ist ürbigens die meldung im Architekten, wenn man es versucht.
poQuery: Error 7200: AQE Error: State = 42000; NativeError = 2117; [SAP][Advantage SQL Engine]Unexpected token: order : ORDER BY clause not legal in VIEW without TOP x -- Location of error in the SQL statement is: 287 (line: 9 column: 5)
und da steht ganz klar, es klappt, aber nur mit TOP X Angabe

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 9:18
von nightcrawler
Thema ist doch, dass dies ein Problem von Rogers Klassen ist.
Das eingangs erwähnte SQL Statement funktioniert im ADS selbst. Das ORDER BY wird vermutlich von Rogers Klassen irgendwie zusätzlich interpretiert. Bleibt die Frage, warum das in Alaskas "AdsStatement" und in Friedhelms Klassen das Problem nicht zutage tritt, bei Roger schon. Ich vermute hier nicht einen Fehler beim ADS ;)

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 9:22
von Manfred
Joachim,
dem ADS wurde (von meiner Seite) niemals ein Fehler angedichtet. Meine Frage war nur, warum es über den Architekten klappt, aber nicht über xBase++. Ich bin leider noch nicht dazu gekommen, es in purem xbase zu testen um dann zu sehen ob es Rogers Klassen liegt. Wenn es an Rogers Klassen liegt, dann wäre das sehr ärgerlich, weil xbase pur die Query anschließend nicht schließt. Was aber Alaska schon bekannt ist. Aber mit der View kann ich derzeit leben. Ich habe ein TOP eingebaut und das reicht erstmal für eine Zeit. So habe ich Luft zu überlegen, wie ich das Problem anders angehen kann.

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 9:45
von nightcrawler
Manfred,
ich habe in meinem Buch die Klassen von Steffen (und auch den Beitrag dazu). Wenn ich mir die Quellen mal anschaue, gehe ich schon davon aus, dass das Statement auch geschlossen wird:

Code: Alles auswählen

METHOD AdsStatement:Close()
   IF(::HANDLE==NIL)
      RETURN(.F.)
   ENDIF

   // cursor still open
   IF(Used(::Alias))
     (::Alias)->(DbCloseArea())
   ENDIF

   // close statement
   ::LastError := AdsCloseSQLStatement(::HANDLE)
   ::Statement := NIL
   ::HANDLE    := NIL
   ::Alias     := NIL
RETURN

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 9:48
von Manfred
Joachim,
Du gehst davon aus. Ja, das kannst Du gerne. Bis zu meiner Entdeckung ging Alaska auch davon aus. :wink:
https://www.alaska-software.com/scripts ... PDRID=7290

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 9:51
von nightcrawler
Du siehst aber schon, dass ich _nicht_ DACSQLStatement verwendet habe?

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 9:56
von Manfred
Nein,
habe ich nicht erkannt. Aber in Alaskas Beispiel aus Deinem Buch wird doch auch DacSession benutzt!? Und ich meine das Beispiel habe ich mir damals herangenommen und dann probiert. Nachdem ich dann auf besagtes Problem gestossen bin, bin ich auf Rogers Technik gestossen und damit klappte es.

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 10:02
von Manfred
ich verstehe es trotzdem nicht. Ich kann nicht erkennen, das Du irgendwas eigenes benutzt. Du machst ein DbCloseArea(). Genau das habe ich mit pur xbase auch gemacht, aber xbase hat kein Close gemacht. Also, wo liegt Deiner Meinung nach jetzt der Unterschied?

Re: Architect SQL zu Programm SQL

Verfasst: Mo, 16. Nov 2020 11:31
von nightcrawler

Code: Alles auswählen

::LastError := AdsCloseSQLStatement(::HANDLE)
Da schließt das SQL statement auf ADS Seite.