Fragen zu SQL-Tabellen

alles zum Microsoft SQL Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Fragen zu SQL-Tabellen

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fragen zu SQL-Tabellen

Beitrag von brandelh »

schau mal ob due DbUseArea() statt USE nehmen kannst.
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fragen zu SQL-Tabellen

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Sören
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 205
Registriert: Mo, 07. Aug 2006 10:18
Wohnort: Leipzig
Danksagung erhalten: 11 Mal

Re: Fragen zu SQL-Tabellen

Beitrag von Sören »

Hallo Jan,
Jan hat geschrieben: Wie mache ich ein DbSeek())? Ich kann ja schlecht einen Indexnamen als 3. Parameter übergeben.
Du sortierst die Tabelle mit ORDER BY <field> und kannst dann ein
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 )
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.

Code: Alles auswählen

SQL "SELECT * FROM artikel ORDER BY artnr;"
Beste Grüße,
Sören
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fragen zu SQL-Tabellen

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Fragen zu SQL-Tabellen

Beitrag von georg »

Hallo, Jan -


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.
UliTs
Der Entwickler von "Deep Thought"
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

Beitrag von UliTs »

Hast Du den Dateinamen mal in Hochkommata gesetzt.
Hilft dies?

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fragen zu SQL-Tabellen

Beitrag von Jan »

Uli,

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.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fragen zu SQL-Tabellen

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fragen zu SQL-Tabellen

Beitrag von brandelh »

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.
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Fragen zu SQL-Tabellen

Beitrag von georg »

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
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fragen zu SQL-Tabellen

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
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

Beitrag von UliTs »

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
Hallo 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
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fragen zu SQL-Tabellen

Beitrag von brandelh »

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 ;-)
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: Fragen zu SQL-Tabellen

Beitrag von georg »

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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten