Seite 5 von 7
Verfasst: 20.01.2008 16:45
von PBFetischist
Hallo mk-soft,
die LIB ist super und ich habe gleich eine Frage dazu (MySQL):
Kann ich denn eigentlich meinen eigenen DSN angeben? Jetzt wird ein DSN aus Programmname und Datenbank erzeugt. Das habe ich noch nicht hinbekommen, vielleicht habe ich auch etwas überlesen...
Grüße
Heiko
Verfasst: 20.01.2008 21:06
von mk-soft
hi,
wäre ein noch weitere optionaler parameter. bin der meinun das es nicht erforderlich ist, da man den dsn name auch weitergeben kann und eigendlich immer eindeutig ist.
FF

Verfasst: 21.05.2008 22:37
von ts-soft
@Michael
Könntest DD ja mal eine PM schicken, ob er es aufnimmt, im nächsten
PBOSL Update.
Allerdings fehlt noch die Hilfe, hm...
Gruß
Thomas
Verfasst: 01.06.2008 17:31
von mk-soft
Update
Hi,
da Tailbite jetzt mit PB4.20 läuft

(Hier ein grossen Dank an die Entwickler von Tailbite)
ist jetzt die aktuelle Version für PB4.20 verfügbar
FF
P.S. Werde mich dann an die Hilfe setzen.
Download v1.09 (PB v4.20)
Download v1.08 (PB v4.02 und v4.10)
Verfasst: 03.06.2008 09:29
von dige
Die Erweiterung betrifft im wesentlich ein Vereinfachung mit dem DSN, oder?
Kann man damit auch ermitteln wieviel Datensätze eine SELECT-Abfrage
zurück liefert, oder muss man da auch erst mit NextDatabaseRow () alles
durchscannen?
Verfasst: 03.06.2008 09:38
von Kiffi
dige hat geschrieben:Kann man damit auch ermitteln wieviel Datensätze eine SELECT-Abfrage
zurück liefert
Grüße ... Kiffi
Verfasst: 03.06.2008 09:42
von dige
Danke Kiffi, das habe ich schon befürchtet. Es geht wirklich nur über
eine vorherige Count-Abfrage? Also quasi nicht alla:
NbRows = DatabaseRows (DbId)
Wenn man mit Joins und Subselects arbeitet wird das aber arg langsam..
Ich probier mal ob man mit ReDim was machen kann..
Verfasst: 03.06.2008 12:52
von Kiffi
dige hat geschrieben:Ich probier mal ob man mit ReDim was machen kann..
Du könntest alternativ LinkedLists verwenden.
Grüße ... Kiffi
Verfasst: 03.06.2008 14:55
von dige
Habs jetzt so gelöst ... und scheint ziemlich fix zu sein. Evtl. kann man
ja auch in 1.000er Schritten Dimensionieren...
Code: Alles auswählen
; Ermittele Anzahl DataBase Rows und kopiere das Ergebnis
; in ein Array für komfortablen Zugriff..
; DiGe german forum 03/06/08
Global Dim ODBCData.s(0, 0)
Global Rows.l, Cols.l
Procedure.l ODBC_GetTable (DbId.l, SQL.s)
Protected Count.l = 100
; Global! Immer vorher zurücksetzen
Cols = 0
Rows = 0
If IsDatabase(DbId) And DatabaseQuery(DbId, SQL)
Cols = DatabaseColumns(DbId) - 1
Dim ODBCData.s( Cols, Count )
While NextDatabaseRow(DbId)
If Rows = 0
; Spalten Namen zuweisen
For i = 0 To ols
ODBCData( i, 0 ) = DatabaseColumnName(DBid, i)
Next
EndIf
Rows + 1
; Wenn Grenze erreich, Feld erneut vergrößern
If Rows > Count
Count + 100
ReDim ODBCData.s( Cols, Count )
EndIf
; Werte ins Feld übernehmen
For i = 0 To Cols
ODBCData( i, Rows ) = GetDatabaseString(DbId, i)
Next
Wend
Else
Debug DatabaseError()
EndIf
ProcedureReturn Rows
EndProcedure
Verfasst: 04.06.2008 22:36
von PBFetischist
Du suchst ein Pendant zu odbc_num_rows() in PHP. Ich habe noch keinen ODBC Treiber gefunden bei der ich nach odbc_num_rows() NICHT -1 erhalten habe. Funktioniert so gut wie nie. (Access, DB2, SQL SERVER und Paradox getestet)
Mit deinem Beispiel durchläufst du ja leider auch alle Zeilen einmal.
Recht hast du, bei einer Micky Maus Abfrage kann ich die Query zweimal durchlaufen lassen, aber bei Subselects oder Unions dauert es einfach zu lange.
So mach ich es mit einer Linked List:
Code: Alles auswählen
NewList dump.s()
query.s= "Select * "
query.s+ "FROM retourentabelle "
If DatabaseQuery(0,query)
Anz_Spalten = DatabaseColumns(0)
While NextDatabaseRow(0)
values.s = ""
Columns.s = ""
For SpalteNr = 0 To Anz_Spalten - 1
columns+ DatabaseColumnName(0, SpalteNr)
If SpalteNr < Anz_Spalten -1
columns+ ","
EndIf
If DatabaseColumnType(0, SpalteNr) = 2
values+ "'" + GetDatabaseString(0,SpalteNr) + "'"
Else
values+ GetDatabaseString(0,SpalteNr)
EndIf
If SpalteNr < Anz_Spalten -1
values+ ","
EndIf
Next
AddElement(dump())
dump() = "insert into retourentabelle (" + Columns + ") values(" + values + ")"
Wend
EndIf
Debug CountList(dump())