PBOSL_ExDatabase lib

Anwendungen, Tools, Userlibs und anderes nützliches.
PBFetischist
Beiträge: 55
Registriert: 26.10.2004 19:42

Beitrag 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
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag 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 :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Update

Hi,

da Tailbite jetzt mit PB4.20 läuft :allright: (Hier ein grossen Dank an die Entwickler von Tailbite)
ist jetzt die aktuelle Version für PB4.20 verfügbar :wink:

FF :wink:

P.S. Werde mich dann an die Hilfe setzen.

Download v1.09 (PB v4.20)
Download v1.08 (PB v4.02 und v4.10)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
dige
Beiträge: 1236
Registriert: 08.09.2004 08:53

Beitrag 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?
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

dige hat geschrieben:Kann man damit auch ermitteln wieviel Datensätze eine SELECT-Abfrage
zurück liefert

Code: Alles auswählen

Select Count(Feld) As Anzahl From Tabelle Where...
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dige
Beiträge: 1236
Registriert: 08.09.2004 08:53

Beitrag 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..
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

dige hat geschrieben:Ich probier mal ob man mit ReDim was machen kann..
Du könntest alternativ LinkedLists verwenden.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
dige
Beiträge: 1236
Registriert: 08.09.2004 08:53

Beitrag 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
"Papa, ich laufe schneller - dann ist es nicht so weit."
PBFetischist
Beiträge: 55
Registriert: 26.10.2004 19:42

Beitrag 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()) 
PB 4.30 auf Windows Vista / XP SP2 und Linux
Antworten