SQL-Tabellen Abfrage (*.mdb) optimieren (schneller machen)

Anfängerfragen zum Programmieren mit PureBasic.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

SQL-Tabellen Abfrage (*.mdb) optimieren (schneller machen)

Beitrag von marco2007 »

Hallo,

wie kann man eine Tabellen-Auflistung optimieren, sprich schneller machen?

Eine txt-Datei mit ca. 250 Zeilen wird in Bruchteilen von einer Sekunde gelesen, eine Access-Datenbank mit 250 Einträgen in fast 14 Sekunden....(mir ist schon klar, daß Datenbank-Abfragen nicht sehr schnell sind, aber so langsam....)

Was muß man bei folgenden Code ändern, damit mein Gesicht nicht einschläft?

Code: Alles auswählen

Enumeration
#db
EndEnumeration
InitDatabase()
db = OpenDatabase(#db, "PSP", "", "") 
  If db 
    If DatabaseQuery(#db, "SELECT * FROM Datentest")
    anfang.l=ElapsedMilliseconds()
      FirstDatabaseRow(#db)
      b.s=GetDatabaseString(#db, 0)
        While NextDatabaseRow(#db)<>0
          b.s=GetDatabaseString(#db, 0)
        Wend
        ende.l=ElapsedMilliseconds()
        Zeit.f=(ende-anfang)/1000
        MessageRequester("Zeit", StrF(zeit))
    Else
      MessageRequester("Achtung", "Kann die folgende Abfrage 'PSP' nicht ausführen: "+DatabaseError())
    EndIf
  EndIf
Ich habe leider nichts passendes im Forum oder im Codearchiv gefunden, außer http://www.purebasic.fr/german/viewtopi ... ght=access (der Code funkt leider nicht, selber Fehler wie Nico)

Danke
Marco
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Muss wo anders dran liegen. Das Erstmalige öffnen kann zu einer kleinen verzögerung kommen. Aber 14 Sekunden ist nicht normal.

P.S.
1000 Datensätze -> 0.140s mit debugger
1000 Datensätze -> 0.109s ohne debugger

Code: Alles auswählen

Procedure Ausgabe(Base.s)
  
  If Base
    Debug "DSN=" + Base
    If OpenDatabase(#Datenbank, Base, "", "")
      sql.s = "Select * From Telefon"
      If DatabaseQuery(#Datenbank, sql) ; Ermittelt alle Einträge in der 'employee' Tabelle
        Spalten = DatabaseColumns(#Datenbank) - 1
        temp.s = ""
        For Spalte = 0 To Spalten
          temp + DatabaseColumnName(#Datenbank, Spalte) + ";"
        Next
        Debug temp
        While NextDatabaseRow(#Datenbank)  ; alle Einträge durchlaufen
          temp.s = ""
          For Spalte = 0 To Spalten
            temp + GetDatabaseString(#Datenbank, Spalte) + ";"
          Next
          Debug temp
        Wend
      Else
        Debug DatabaseError()
      EndIf
      CloseDatabase(#Datenbank)
    Else
      Debug DatabaseError()
      
    EndIf
  EndIf

EndProcedure
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Hm, hast recht! Am Stand-PC pfeift es...extrem schnell....

[Off topic]
Hast Du eine Ahnung, woran es liegen kann?
Windows 11 - PB 6.03 x64
_________________________________
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Nur zur Info:

Bei mir beim Laptop war die Ablaufverfolgung eingeschaltet. Darum waren die Abfragen so extrem langsam.....

(zu finden unter Systemsteuerung/Verwaltung/Datenquellen (ODBC))...ist mir nur aufgefallen, weil im Temp-Ordner eine große Datei namens SQL.log herumschwirrte...
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

:allright:

Wer suchet, der findet
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten