Seite 1 von 2
[gelöst] Base-Tabelle auslesen
Verfasst: Di, 20.09.2011 17:59
von NTClient
Hallo Jungs (und Mädels).
Ich habe die Suchen benutzt, hänge aber an einer einfachen Sache fest. Ich möchte die Tabellenwerte einer Base-Tabelle auslesen:
Code: Alles auswählen
Sub TagAuslesen
DBContext=createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource=DBContext.getByName("Bürodatenbank")
ConnectToDB=DataSource.GetConnection ("","")
SQLStatement=ConnectToDB.createStatement
MA = inputbox ("Mitarbeiternummer")
sql= "SELECT ""Mo"", ""Di"", ""Mi"", ""Do"", ""Fr"", ""Sa"", ""So"" FROM ""Woche"" WHERE ""Id"" = '" & MA &"'"
Result = SQLStatement.executeQuery(sql)
Wert_heute = Result.getString([b]index[/b])
MsgBox (Wert_heute)
end Sub
Fehlermeldung:
Es ist eine Exception aufgetreten. Type: com.sun.star.sdbc.SQLException. Message: No data is available.
Was muss für
index eingetragen werden, wenn ich den Wert in der Spalte für "Mi" aus Zeile WHERE ""Id"" = '" & MA &" haben möchte?
Gruß Bernd!
Moderation,4: CODE tags gesetzt
Re: Base-Tabelle auslesen
Verfasst: Di, 20.09.2011 18:54
von komma4
Du musst das
RESULT abarbeiten, auch wenn nur ein Treffer zurück geliefert wird
Code: Alles auswählen
While Result.Next()
' dritte Spalte
Wert_heute = Result.getString( 3 )
WEnd
Hilft Dir das?
Edit: wenn Deine
ID ein nummerischer Wert ist... dann sollte er auch nicht in Hochkommata stehen
Re: Base-Tabelle auslesen
Verfasst: Mi, 21.09.2011 08:11
von NTClient
OK- hat funktioniert. Vielen Dank. Nur: verstanden hab ich's nicht. Bekannt ist mir sowas wie:
While a < 100
Print "Alles Sch..., Deine Elli"
a=a+1
Wend
Was genau muss in RESULT abgearbeitet werden? Wie würde hier
Wert_heute = Result.getArray( index )
funktionieren, wenn ich alle Spaltenwerte auslesen möchte?
Gruß Bernd!
Re: Base-Tabelle auslesen
Verfasst: Mi, 21.09.2011 10:13
von komma4
Die
WHILE-Schleife ist zum Abarbeiten aller Ergebnisse der SQL-Abfrage
Jeder
RESULT-Satz hat dabei so viele Spalten, wie Du abgefragt hast.
Weisst Du das nicht, so kannst Du mit
die Anzahl der zurück gelieferten Spalten ermitteln.
Willst Du alle Spalten auslesen...
Code: Alles auswählen
lResultCols = Result.getColumns().getCount()
While Result.Next()
For l = 0 To lResultCols - 1
print "Spalteninhalt " & l+1 & ": " & oResultSet.getString( l + 1 )
Next l
WEnd
Hilft das Deinem Verständnis weiter?
Re: Base-Tabelle auslesen
Verfasst: Mi, 21.09.2011 19:38
von NTClient
Ah, langsam verstehe ich. Vielen Dank. Aber müßte es bei Dir dann nicht heißen
Code: Alles auswählen
print "Spalteninhalt " & l+1 & ": " & Result.getString( l + 1 )
oder was hat
darin zu bedeuten?
Verstehe ich das richtig, das das Ganze als Array so ausgelesen würde:
Code: Alles auswählen
Sub TagAuslesen
DBContext=createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource=DBContext.getByName("Bürodatenbank")
ConnectToDB=DataSource.GetConnection ("","")
SQLStatement=ConnectToDB.createStatement
MA = inputbox ("Mitarbeiternummer")
sql= "SELECT ""Mo"", ""Di"", ""Mi"", ""Do"", ""Fr"", ""Sa"", ""So"" FROM ""Woche"" WHERE ""Id"" = " & MA &""
Result = SQLStatement.executeQuery(sql)
lResultCols = Result.getColumns().getCount()
dim MyArray(lResultCols) as string
While Result.Next()
For i = 0 To lResultCols - 1
MyArray (i) = Result.getString( i )
Next i
WEnd
end Sub
Sieht doch gut aus, oder? Werde ich morgen mal ausprobieren...
Gruß Bernd!
Re: Base-Tabelle auslesen
Verfasst: Do, 22.09.2011 07:02
von komma4
a) ja, "mein" oResultset ist "Dein" Result - Code war kopiert und nicht durchgängig angepasst
b) die Zähler sind bei Dir nicht korrekt: während Array Null-basiert ist, werden die Spalten ab 1 gezählt
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 09:35
von NTClient
Tschuldigung, aber ich muß noch mal stören:
Wie gelingt es mir, die n-te Zeile einer Tabelle auszulesen.
Code: Alles auswählen
for i = 1 to Anzahl_Zeilen
sql= "SELECT ""ID"" FROM ""table"" where " ...???... Zeile = i ...???...
next i
Gibt es da einen SQL-Befehl?
Hintergrund: Ich will prüfen, ob ein Wert in der Spalte "ID" der Tabelle "table" vorhanden ist.
Gruß Bernd!
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 10:00
von komma4
Verstehe die Frage nicht ganz, glaube ich
Code: Alles auswählen
sSQL = "SELECT * FROM ""table"" WHERE ""ID"" = " & suchbegriff
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 10:43
von NTClient
Nee ich suche
SELECT "Wert aus Spalte "n" aus Tabelle "table" und dort aus Zeile i"
Ich will Zeile für Zeile prüfen, ob in Spalte "n" z. B. der Wert "xyz" steht.
Gruß Bernd!
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 11:03
von Philipp_19
Moin,
versuchs mal mit "rownum = "
hab mir grade nochmal genau das Problem durchgelesen:
so filterst du alle einträge, die xyz in der ID stehen haben.
Wenn du nun wissen willst, ob die Zeile vorhanden ist:
Grüße
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 12:40
von komma4
Philipp_19 hat geschrieben:
Ungetestet!
Sonst hättest Du gesehen, dass es so nicht funktioniert.
In den meisten SQL-Dialekte erwarten bei
LIKE eine
Wildcard, hier (bei HSQLDB) bspw.
Liefert alle Zeilen, deren Inhalt in der Spalte
name mit
name beginnt
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 12:58
von komma4
NTClient hat geschrieben:Hintergrund: Ich will prüfen, ob ein Wert in der Spalte "ID" der Tabelle "table" vorhanden ist.
Mit der Abfrage
Code: Alles auswählen
sSQL = "SELECT count(*) FROM ""Tabelle"" WHERE ""id"" = 1 "
und der Auswertung
Code: Alles auswählen
While Result.Next()
If Result.Columns().getByIndex(0).getInt() > 0 Then
Msgbox "id bereits vorhanden"
End If
WEnd
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 13:37
von Philipp_19
komma4 hat geschrieben:Philipp_19 hat geschrieben:
Ungetestet!
Sonst hättest Du gesehen, dass es so nicht funktioniert.
In den meisten SQL-Dialekte erwarten bei
LIKE eine
Wildcard, hier (bei HSQLDB) bspw.
sehr wohl getestet, nur dann beim tippen das/die zeichen vergessen.
der select hat bei mir so auch ohne wildcard funktioniert, deswegen nicht 100% drauf geachtet...sorry
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 16:24
von DPunch
Aloha
komma4 hat geschrieben:In den meisten SQL-Dialekte erwarten bei LIKE eine Wildcard, hier (bei HSQLDB) bspw.
Dem muss ich mal kurz widersprechen, ich kenne keinen SQL-Dialekt, der da eine Wildcard verlangt.
Wenn man ohne Wildcards suchen will, sollte man prinzipiell zwar eher ein "=" statt "LIKE" verwenden, aber entweder wandelt der Query Optimizer des DBMS zweiteres sowieso in ersteres um, oder man muss damit leben, dass man unter Umständen eben case insensitive sucht (sprich Suche mit "SCHMITT" liefert auch "schmitt" als Treffer).
Re: [gelöst] Base-Tabelle auslesen
Verfasst: Mo, 26.09.2011 19:01
von komma4
DPunch hat geschrieben:Dem muss ich mal kurz widersprechen, ich kenne keinen SQL-Dialekt, der da eine Wildcard verlangt.
Akzeptiert.
War unklar ausgedrückt...
wenn ich
LIKE verwende, dann suche ich mit
wildcards, da ich -wenn ich diese nicht benötige, mit
= suchen würde
