Seite 1 von 1

MySQL 2 Fragen (Suche und Google waren keine Hilfe)

Verfasst: 10.06.2008 00:40
von Aspirant
Hallo,
habe vor einiger zeit schon mal gefragt warum ein Verbindungs aufbau mit der libmysql.dll so lage dauert!

Ich benutze Folgen Code

Code: Alles auswählen

; English forum: http://www.purebasic.fr/english/viewtopic.php?t=2734
; Author: Max
; Date: 22. April 2003
; OS: Windows
; Demo: Yes


; Example for using MySQL with the libmysql.dll (download from
; http://www.mysqltools.com/download.htm)

; SQLite ist eine eigenständige Datenbankengine, die zwar die SQL92
; Syntax unterstützt, sonst aber mit MySQL nichts zu tun hat.
;
; Wenn Du übers Internet auf eine MySQL Datenbank zugreifen
; möchtest kannst Du das entweder über ODBC oder direkt mit der
; libmysql.dll -> http://www.mysqltools.com/download.htm realisieren.

; PS: Nachfolgend von Max aus dem Englischen Forum ein Beispiel für
; die Nutzung der libmysql.dll:


#libmysql = 1

host.s    = "db4free.net"
user.s    = "aspirant"
passwd.s  = "l38543"
db.s      = "purebasic"
port.l    = 3306

dbHnd.l
SQL.s
row.s
i.l
j.l
affRows.l
fieldNum.l
rowsNum.l

Procedure.s GetError(db_ID,requester)
  
  Protected Errormsg.s, i.l, Error.l
  
  If CallFunction(#libmysql,"mysql_errno",db_ID) > 0
    *Error =CallFunction(#libmysql,"mysql_error",db_ID)
    i=-1
    Repeat
      i=i+1
      Errormsg=Errormsg+PeekS(*Error+i,1)
    Until PeekB(*Error+i)=0
    If requester
      Result= MessageRequester("MySQL error",Errormsg,#PB_MessageRequester_Ok)
    EndIf
  EndIf
  
  ProcedureReturn Errormsg
  
EndProcedure



If OpenLibrary(#libmysql,"libmysql.dll")
  Result=CallFunction(#libmysql,"mysql_init",dbHnd)
  If Result
    dbHnd = Result
    If CallFunction(#libmysql,"mysql_real_connect",dbHnd, host, user, passwd, db, port, "", 0) = 0
      GetError(dbHnd,1)
    Else
      ;CallDebugger
      SQL = "SELECT * FROM myip"
      If CallFunction(#libmysql,"mysql_real_query", dbHnd, SQL, Len(SQL))
        GetError(dbHnd,1)
      Else
        *mysqlResult=CallFunction(#libmysql,"mysql_store_result",dbHnd)
        
        ;no result returned
        If *mysqlResult=0
          ;no fields returned means error
          If CallFunction(#libmysql,"mysql_field_count",dbHnd)
            GetError(dbHnd,1)
            ;fields are returned, so no error but query didn't return data
          Else
            
          EndIf
          ;results are returned
        Else
          
          
          affRows   = CallFunction(#libmysql,"mysql_affected_rows",dbHnd)
          fieldNum  = CallFunction(#libmysql,"mysql_num_fields",*mysqlResult)
          rowsNum   = CallFunction(#libmysql,"mysql_num_rows",*mysqlResult)
          
          Debug affRows
          Debug fieldNum
          Debug rowsNum
          
          
          For i=1 To rowsNum
            *mysqlRow=CallFunction(#libmysql,"mysql_fetch_row",*mysqlResult)
            *mysqlLen=CallFunction(#libmysql,"mysql_fetch_lengths",*mysqlResult)
            
            row = ""
            
            ;length of given field
            For j=1 To fieldNum
              length=PeekL(*mysqlLen+4*(j-1))
              fieldptr=PeekL(*mysqlRow+4*(j-1))
              If fieldptr>0
                content.s=PeekS(fieldptr,length)
              Else
                ;zero pointer returend means empty field
                content="NULL"
              EndIf
              row = row + content + ";"
            Next j
            
            Debug row
            
          Next i
          Result.l=CallFunction(#libmysql,"mysql_free_result",*mysqlResult)
        EndIf
      EndIf
    EndIf
  EndIf
Else
  MessageRequester("Error!", "Couldn't open the libmysql.dll!")
EndIf


; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
Die im Code Angegebene DB ist vorhanden und ist für test zwecke genutzt werden.

Fragen:
1. Beim verbinden mit dem Server erhalte ich eine Fehler Meldung, hier ist mir der Hintergrund der Meldung nicht klar.
2. Warum brauch der Verbindungsaufbau gute 40sec. ?

Ein test mit HeidiSQL ergab Verbindungsaufbau extern ca 10sec. Lokal <1sec
SQL Server Lokal ist 4.0.25

Frage 2 ist für mich die Wichtigere

MFG Aspi

Verfasst: 10.06.2008 08:34
von Bisonte
zu 1.)
Also ich bekomme als Fehlermeldung, das das table "myip" nicht vorhanden ist.
Wäre logisch, wenn du es nicht angelegt hast.

zu 2.)

Bei mir dauerte der Programmablauf bis zur Fehlermeldung nichtmal 3 Sekunden.
(Inkl. Firewallmeldung durchklicken ;) )

Es könnte an deiner I-Netverbindung liegen, an deiner benutzten libmysql.dll oder
vielleicht an irgendeinem Programm was auch Verbindung zum Netz hat und deinen Traffic bösartig hochschraubt.

Verfasst: 10.06.2008 14:37
von Aspirant
Ja so ist das die Einfachen Dinge beachtet man nicht,
die Table "MYIP" is klar ist ja jetzt "Test" war woll schon zu Spät zum richtigen Denken.
Naja und meine Lieb war von 2003 habe jetzt eine von 2006 und jetzt gehts auch fix

Danke