Fragen zu SQL-Tabellen
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Fragen zu SQL-Tabellen
Ich bin gerade dabei, einen Zugriff auf eine MS-SQL einzubauen. Ausschließlich mit Xbase++-Bordmitteln, per ODBCDBE. Soweit klappt das auch einwandfrei. Aber ein paar Fragen habe ich doch noch:
1) Lt. Onlinehilfe kann ich im USE eine SQL-Anweisung einbauen. Also statt "Use cDbf New" nehme ich ein "Use ("Select * from cTabelle;") Via ODBCDBE new". OK soweit. Aber was ist, wenn die Tabelle einen schwierigen Namen hat? In diesem Fall z. B. "firmenname Standort$tabellenname"? Da steigt der Use mit SQL-Angabe aus. Ein normaler Use macht das aber. Lt. ODBCDBE-Hilfe werden Sonderzeichen und Leerzeichen durch "_" ersetzt. Das funktioniert bei diesem Tabellennamen aber definitiv nicht.
2) Warum ich ein Use mit SQL-Anweisung machen möchte ist, ich möchte gerne eine WHERE-Ergänzung haben. Denn die Tabelle zu öffnen und dann einen Filter drauf zu setzen halte ich für leicht kontraproduktiv. Unterschied Filter auf Serverseite oder Clientseite = Zeitfrage. Gibt es eine andere Möglichkeit?
3) Wie mache ich ein DbSeek())? Ich kann ja schlecht einen Indexnamen als 3. Parameter übergeben.
Da kommen bestimmt noch mehr Fragen
Jan
1) Lt. Onlinehilfe kann ich im USE eine SQL-Anweisung einbauen. Also statt "Use cDbf New" nehme ich ein "Use ("Select * from cTabelle;") Via ODBCDBE new". OK soweit. Aber was ist, wenn die Tabelle einen schwierigen Namen hat? In diesem Fall z. B. "firmenname Standort$tabellenname"? Da steigt der Use mit SQL-Angabe aus. Ein normaler Use macht das aber. Lt. ODBCDBE-Hilfe werden Sonderzeichen und Leerzeichen durch "_" ersetzt. Das funktioniert bei diesem Tabellennamen aber definitiv nicht.
2) Warum ich ein Use mit SQL-Anweisung machen möchte ist, ich möchte gerne eine WHERE-Ergänzung haben. Denn die Tabelle zu öffnen und dann einen Filter drauf zu setzen halte ich für leicht kontraproduktiv. Unterschied Filter auf Serverseite oder Clientseite = Zeitfrage. Gibt es eine andere Möglichkeit?
3) Wie mache ich ein DbSeek())? Ich kann ja schlecht einen Indexnamen als 3. Parameter übergeben.
Da kommen bestimmt noch mehr Fragen
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Moin Hubert,
keine Änderung. Gebe ich den Namen ohne Unterstriche ein, dann meckert der, das es keine Tabelle "firmenname" gäbe. Bricht also nach dem Leerzeichen ab. Baue ich Unterstriche ein (nur für das Leerzeichen, oder für Leerzeichen und $), dann meckert der, das sei ein ungültiger Objektname. Genau das gleiche Verhalten wie beim USE. Der Alias (wenn ich den ohne SQL öffne) ist übrigens mit Unterstrich an beiden Punkten. Wie es laut Doku sein sollte.
Jan
keine Änderung. Gebe ich den Namen ohne Unterstriche ein, dann meckert der, das es keine Tabelle "firmenname" gäbe. Bricht also nach dem Leerzeichen ab. Baue ich Unterstriche ein (nur für das Leerzeichen, oder für Leerzeichen und $), dann meckert der, das sei ein ungültiger Objektname. Genau das gleiche Verhalten wie beim USE. Der Alias (wenn ich den ohne SQL öffne) ist übrigens mit Unterstrich an beiden Punkten. Wie es laut Doku sein sollte.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 205
- Registriert: Mo, 07. Aug 2006 10:18
- Wohnort: Leipzig
- Danksagung erhalten: 11 Mal
Re: Fragen zu SQL-Tabellen
Hallo Jan,
dbSeek() auf die Werte der sortierten Spalte anwenden.
Voraussetzung ist, dass Index_Autoopen .T. gesetzt ist.
Was Deine Tabellennamen mit Sonderzeichen betrifft, kann ich Dir auch nicht
weiterhelfen, aber probiere statt des "USE"- mal den "SQL"-Befehl.
Vielleicht hast Du ja damit Erfolg.
Beste Grüße,
Sören
Du sortierst die Tabelle mit ORDER BY <field> und kannst dann einJan hat geschrieben: Wie mache ich ein DbSeek())? Ich kann ja schlecht einen Indexnamen als 3. Parameter übergeben.
dbSeek() auf die Werte der sortierten Spalte anwenden.
Voraussetzung ist, dass Index_Autoopen .T. gesetzt ist.
Code: Alles auswählen
oSession:setProperty( ODBCSSN_INDEX_AUTOOPEN, .T. )
USE ("SELECT * FROM artikel ORDER BY artnr;") NEW
cArtNr := "12345"
dbSeek( cArtNr )
weiterhelfen, aber probiere statt des "USE"- mal den "SQL"-Befehl.
Vielleicht hast Du ja damit Erfolg.
Code: Alles auswählen
SQL "SELECT * FROM artikel ORDER BY artnr;"
Sören
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Hallo Sören,
Danke für die Hinweise. Bringt mich leider überhaupt nicht weiter, da der Tabellenname auch in dem SQL-Aufruf aussteigt. Gleiche Fehlermeldung wie beim Use.
Jan
Danke für die Hinweise. Bringt mich leider überhaupt nicht weiter, da der Tabellenname auch in dem SQL-Aufruf aussteigt. Gleiche Fehlermeldung wie beim Use.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Fragen zu SQL-Tabellen
Hallo, Jan -
hast Du den SELECT mal interaktiv beim SQL Server eingegeben? Mag der den Befehl? Ich denke nämlich, nicht ...
Gruss,
Georg
hast Du den SELECT mal interaktiv beim SQL Server eingegeben? Mag der den Befehl? Ich denke nämlich, nicht ...
Gruss,
Georg
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Hast Du den Dateinamen mal in Hochkommata gesetzt.
Hilft dies?
Uli
Hilft dies?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Uli,
nein, das ganz Prozedere hatte ich auch schon durch. Ohne Erfolg.
Jan
nein, das ganz Prozedere hatte ich auch schon durch. Ohne Erfolg.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Ich möchte noch mal auf eine der Eingangsfragen zurückkommen, die bislang zwischendurch in all der anderen Diskussion mal kurz von Sören behandelt wurde: Wie mache ich am besten ein DbSeek()? Aber Achtung: Die SQL ist ausschließlich ReadOnly geöffnet!
Bislang funktioniert das zwar ansich korrekt, aber die Suche nach einer simplen Kundennummer dauert im Netz gemessene 30 Sekunden. Das ist den Sachbearbeitern ein ganz klein wenig zu lahm.
Jan
Bislang funktioniert das zwar ansich korrekt, aber die Suche nach einer simplen Kundennummer dauert im Netz gemessene 30 Sekunden. Das ist den Sachbearbeitern ein ganz klein wenig zu lahm.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Hallo Jan,
am Besten SQLexpress Demo laden, kurz einarbeiten und dann nutzen
Du must einen SQL Befehl nutzen, der genau den gewünschten Satz bzw. die Antwortmenge zurückgibt.
am Besten SQLexpress Demo laden, kurz einarbeiten und dann nutzen
Du must einen SQL Befehl nutzen, der genau den gewünschten Satz bzw. die Antwortmenge zurückgibt.
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Fragen zu SQL-Tabellen
Hallo, Jan -
eigentlich so:
SELECT * FROM kunden WHERE kundennummer = meinwert
Das "*" liefert alle Felder zurück, wenn Du weniger willst, geht es (wenn mehrere Sätze als Ergebnis zurückkommen) schneller, dann eben als
SELECT name, strasse, plz, ort, telefon, telefax, email FROM kunden WHERE kundennummer = meinwert
Wenn die Kundennummer numerisch ist, einfach den String bis " kundennummer = " + Str(nKundenDenIchSuche) verwenden, wenn die Kundennummer ein String ist,
'... kundennummer = "' + cKundeDenIchSuche + '"'
So mache ich das auch mit SQLExpress.
Gruss,
Georg
eigentlich so:
SELECT * FROM kunden WHERE kundennummer = meinwert
Das "*" liefert alle Felder zurück, wenn Du weniger willst, geht es (wenn mehrere Sätze als Ergebnis zurückkommen) schneller, dann eben als
SELECT name, strasse, plz, ort, telefon, telefax, email FROM kunden WHERE kundennummer = meinwert
Wenn die Kundennummer numerisch ist, einfach den String bis " kundennummer = " + Str(nKundenDenIchSuche) verwenden, wenn die Kundennummer ein String ist,
'... kundennummer = "' + cKundeDenIchSuche + '"'
So mache ich das auch mit SQLExpress.
Gruss,
Georg
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Jan
- Marvin
- Beiträge: 14659
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Georg,
kein "Select". Ich kenne SQL gut genug, um das anwenden zu können. Aber Du erinnerst Dich an die Probleme mit dem Select in diesem speziellen Fall? Ich werde also um ein DbSeek() in diesem Fall nicht drumrum kommen können, fürchte ich.
Und SQLExpress wäre ja sicher nett, ist aber (noch) nicht drin bei dem Kunden.
Jan
kein "Select". Ich kenne SQL gut genug, um das anwenden zu können. Aber Du erinnerst Dich an die Probleme mit dem Select in diesem speziellen Fall? Ich werde also um ein DbSeek() in diesem Fall nicht drumrum kommen können, fürchte ich.
Und SQLExpress wäre ja sicher nett, ist aber (noch) nicht drin bei dem Kunden.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Hallo Jan,Jan hat geschrieben:Georg,
kein "Select". Ich kenne SQL gut genug, um das anwenden zu können. Aber Du erinnerst Dich an die Probleme mit dem Select in diesem speziellen Fall? Ich werde also um ein DbSeek() in diesem Fall nicht drumrum kommen können, fürchte ich.
Jan
ich glaube, Du hast Georg falsch verstanden. Er meinte sicher den Select-Befehl innerhalb des Use-Statments:
Code: Alles auswählen
Use ("SELECT name, strasse, plz, ort, telefon, telefax, email FROM kunden WHERE kundennummer = "+str(KundenNummer)) Via ODBCDBE new
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Mitglied XuG Cologne
Mitglied XuG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Fragen zu SQL-Tabellen
Hi,
genau das ist es, warum ich die "integration von SQL und alles geht wie bisher" nicht leiden kann.
Genauso wie man sich vom DOS "ich kontrolliere alles" auf GUI "ich ermögliche das was nötig ist und verhindere was nicht gehen darf" umstellen musste,
muss man sich vom SATZ-orientierten Denken auf Mengenorientiert umstellen.
Für die Kunden muss man nichts kaufen, nur die PRO Version für etwa 450 Euro (inkl. Mwst).
Die ODBCDBE kostet über die Subscription sicher mehr
genau das ist es, warum ich die "integration von SQL und alles geht wie bisher" nicht leiden kann.
Genauso wie man sich vom DOS "ich kontrolliere alles" auf GUI "ich ermögliche das was nötig ist und verhindere was nicht gehen darf" umstellen musste,
muss man sich vom SATZ-orientierten Denken auf Mengenorientiert umstellen.
Für die Kunden muss man nichts kaufen, nur die PRO Version für etwa 450 Euro (inkl. Mwst).
Die ODBCDBE kostet über die Subscription sicher mehr
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2829
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 97 Mal
- Danksagung erhalten: 13 Mal
Re: Fragen zu SQL-Tabellen
Hallo, Jan -
vielleicht ist Deine Frage auch nicht konkret genug gestellt.
Wenn ich mit einer SQL-Anweisung nicht klarkomme, starte ich das Befehlsinterface (ich arbeite normalerweise nur mit MySQL oder dem SQL-Server der iSeries), und probiere dort herum, bis die Syntax stimmt, und das Ergebnis rauskommt, das ich erwarte.
Daher habe ich den Fokus in meinem Beispiel auch nur auf das SELECT Statement bezogen, weil die Einbindung in die ODBCDBE Syntax ein zweites Thema ist. Ausserdem liegt mir - als SQLExpress Benutzer - die "reine" SQL-Syntax mehr.
Vom Grundsatz her sollte der SELECT Befehl eigentlich nur die Sätze liefern, die Du haben willst, so dass ein "dbSeek" entfallen kann. Warum sollte man ein Result Set mit ein paar tausend Sätzen anfordern, um dann daraus zwei zu suchen? Dann doch - wenn möglich - die Anweisung so einstellen, dass eben nur diese beiden geliefert werden.
Gruss,
Georg
P.S.: Gerade die Umstellung von Satz-orientiertem auf mengenorientiertes Denken ist für die meisten von uns extrem schwer. Selbst als gestandener iSeries Programmierer denke ich Satz-orientiert, da die Standard-Programmiersprachen eben Satz-orientiert arbeiten.
vielleicht ist Deine Frage auch nicht konkret genug gestellt.
Wenn ich mit einer SQL-Anweisung nicht klarkomme, starte ich das Befehlsinterface (ich arbeite normalerweise nur mit MySQL oder dem SQL-Server der iSeries), und probiere dort herum, bis die Syntax stimmt, und das Ergebnis rauskommt, das ich erwarte.
Daher habe ich den Fokus in meinem Beispiel auch nur auf das SELECT Statement bezogen, weil die Einbindung in die ODBCDBE Syntax ein zweites Thema ist. Ausserdem liegt mir - als SQLExpress Benutzer - die "reine" SQL-Syntax mehr.
Vom Grundsatz her sollte der SELECT Befehl eigentlich nur die Sätze liefern, die Du haben willst, so dass ein "dbSeek" entfallen kann. Warum sollte man ein Result Set mit ein paar tausend Sätzen anfordern, um dann daraus zwei zu suchen? Dann doch - wenn möglich - die Anweisung so einstellen, dass eben nur diese beiden geliefert werden.
Gruss,
Georg
P.S.: Gerade die Umstellung von Satz-orientiertem auf mengenorientiertes Denken ist für die meisten von uns extrem schwer. Selbst als gestandener iSeries Programmierer denke ich Satz-orientiert, da die Standard-Programmiersprachen eben Satz-orientiert arbeiten.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.