Fehlermeldung bei ODBC-Initialisierung

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Fehlermeldung bei ODBC-Initialisierung

Beitrag von dysti »

Hallo,
bei den untenstehenden Code bekomme ich die Fehlermeldung:
Zeile27: Falscher Parameter-Typ, Zahl anstelle eines Strings erwartet
Was hat sich denn zu früheren Version geändert?

Code: Alles auswählen

; English forum: 
; Author: Rings (updated for PB3.92+ by Lars, updated for PB 4.00 by Andre)
; Date: 05. May 2003
; OS: Windows
; Demo: No


; Notes: This example works fine for Access, if you want to make a DSN connection to a MsSQL 2000 Server
; then create your dsn by hand or read the docu about M$-sql-server carefully. 

; Enhanced Database example 
;by Siegfried Rings (CodeGuru) 
;File$ = OpenFileRequester("PureBasic - Open", "C:\*.mdb", "Microsoft Access (*.mdb)|*.mdb;*.bat|Microsoft Excel (*.xls)|*.xls", 1) 
File$ = "C:\TestDB.mdb" 
#ODBC_ADD_DSN = 1 ; Add Data source 
#ODBC_CONFIG_DSN = 2 ; Configure (edit) Data source 
#ODBC_REMOVE_DSN = 3 ; Remove Data source 
Procedure Makeconnection(Driver.s,strAttributes.s) 
  Result=OpenLibrary(1,"ODBCCP32.DLL") 
  If Result 
    lpszDriver.s=Driver 
    MyMemory=AllocateMemory(Len(strAttributes)) 
    CopyMemory(@strAttributes,MyMemory,Len(strAttributes)) 
    For l=1 To Len(strAttributes ) 
      If PeekB(MyMemory +l-1)=Asc(";"):PokeB(MyMemory +l-1,0):  EndIf 
    Next l 
    Result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_ADD_DSN,lpszDriver.s,MyMemory ) 
    NewResult=SQLConfigDataSource_(0,#ODBC_ADD_DSN,lpszDriver.s,MyMemory ) 
    
    FreeMemory(MyMemory) 
    CloseLibrary(1) 
    If Result 
      ProcedureReturn 1 
    EndIf 
  EndIf 
EndProcedure 

Procedure DeleteConnection(Driver.s,DSN.s) 
  Result=OpenLibrary(1,"ODBCCP32.DLL") 
  If Result 
    lpszDriver.s=Driver 
    strAttributes.s = "DSN="+DSN 
    Result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_REMOVE_DSN,lpszDriver.s,strAttributes ) 
    CloseLibrary(1) 
    If Result 
      ProcedureReturn 1;MessageRequester("Info","DSN Delete",0) 
    EndIf 
  EndIf 
EndProcedure 


MeinPointer.l 
Procedure GetDBHandle() 
  Shared MeinPointer.l 
  !EXTRN _PB_DataBase_CurrentObject;_PB_DataBase_CurrentObject 
  !MOV dword Eax,[_PB_DataBase_CurrentObject] 
  !MOV dword [v_MeinPointer], Eax 
  ProcedureReturn MeinPointer 
EndProcedure 


;File$ = OpenFileRequester("PureBasic - Open", "C:\*.mdb", "Microsoft Access (*.mdb)|*.mdb;*.bat|Microsoft Excel (*.xls)|*.xls", 1) 
File$ = "C:\TestDB.mdb" 
If File$<>"" 
  ;  MessageRequester("Information", "Selected File: "+File$, 0); 
Else 
  End 
EndIf 

EXT.s=UCase(GetExtensionPart(File$)) 
Select EXT 
  Case "MDB" 
    Result=Makeconnection("Microsoft Access Driver (*.mdb)","Server=SomeServer; Description=Description For Purebasic MDB-ODBC;DSN=PureBasic_DSN;DBQ="+File$+";UID=Rings;PWD=Siggi;") 
    ;Case "XLS" 
    ; Result=Makeconnection("Microsoft Excel Driver (*.xls)","DSN=PureBasic_DSN;Description=Description For Purebasic Excel;FileType=Excel97;DBQ="+File$+";") 
EndSelect 

If InitDatabase() = 0 
  MessageRequester("Error", "Can't initialize Database (ODBC v3 or better) environment", 0) 
  End 
EndIf 

OpenConsole() 

Dim DatabaseType.s(4) 
DatabaseType(0) = "Unknown" 
DatabaseType(1) = "Numeric" 
DatabaseType(2) = "String" 
DatabaseType(3) = "Float" 

; First, let's see which drivers are attached to the system.. 
; 
PrintN("Available drivers:") 
PrintN("") 

If ExamineDatabaseDrivers() 
  While NextDatabaseDriver() 
    PrintN(DatabaseDriverName()+" - "+DatabaseDriverDescription()) 
  Wend 
EndIf 

; Open an ODBC database 
; 
;'If OpenDatabaseRequester(0) 
User$="" 
Password$="" 
#Database=1 
Result = OpenDatabase(#Database, "PureBasic_DSN", User$, Password$) 
If Result 
  Browse$="Select * from Authors" 
  PrintN("") 
  PrintN("Database successfully opened !") 
  
  
  PrintN("Type EXIT to quit.") 
  PrintN("or anything else to browse database") 
  
  Repeat 
    Command$ = Input() 
    Select UCase(Command$) 
      Case "EXIT" 
        Quit = 1 
        
      Default 
        
        If DatabaseQuery(#Database, Browse$) 
          
          NbColumns = DatabaseColumns(#Database) 
          PrintN("NbColums: " + Str(NbColumns)) 
          
          For k=0 To NbColumns-1 
            PrintN(DatabaseColumnName(#Database, k) + " - " + DatabaseType(DatabaseColumnType(#Database, k))) 
          Next 
          
          PrintN("") 
          Print ("Press return to continue") : Input() 
          PrintN("") 
          PrintN("Query Result -------------------------------------") 
          
          While NextDatabaseRow(#Database) 
            PrintN(GetDatabaseString(#Database, 0)+Chr(9) +GetDatabaseString(#Database, 1)) 
          Wend 
          
          PrintN("--------------------------------------------------") 
        Else 
          PrintN("Bad Query !") 
        EndIf 
    EndSelect 
  Until Quit = 1 
Else 
  MessageRequester("Info", "Operation canceled", 0) 
EndIf 

;and delete: 
DeleteConnection("Microsoft Access Driver (*.mdb)","PureBasic_DSN") 

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fehlermeldung bei ODBC-Initialisierung

Beitrag von Kiffi »

CallFunction erwartet IMHO eine Adresse auf einen String; nicht den String selber

versuch mal folgendes:

Code: Alles auswählen

Result = CallFunction(1, @"SQLConfigDataSource", 0,#ODBC_ADD_DSN,lpszDriver.s,MyMemory )
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Fehlermeldung bei ODBC-Initialisierung

Beitrag von bobobo »

und wenn du dann noch initdatabasse() geben UseOdbcDatabase() ausgetauscht hast landest du bei einem

---------------------------
PureBasic - Linker error
---------------------------
POLINK: error: Unresolved external symbol '_PB_DataBase_CurrentObject'.

POLINK: fatal error: 1 unresolved external(s).


---------------------------
OK
---------------------------

Nimm dazu mal die Procedure GetDBHandle() da raus .. die wird eh nicht benutzt und greift auf Sachen zurück, die es so nicht (mehr) gibt
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Fehlermeldung bei ODBC-Initialisierung

Beitrag von dysti »

Kiffi,
habe es gemacht, keine Änderung. Die gleiche Fehlermeldung ist immer noch da.



...und danke bobobo
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Fehlermeldung bei ODBC-Initialisierung

Beitrag von bobobo »

mach mal

Code: Alles auswählen

Result = CallFunction(1, "SQLConfigDataSource", 0,#ODBC_ADD_DSN,@lpszDriver.s,@MyMemory )
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fehlermeldung bei ODBC-Initialisierung

Beitrag von Kiffi »

Mist! da habe ich den falschen String erwischt. :lol:
a²+b²=mc²
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Fehlermeldung bei ODBC-Initialisierung

Beitrag von dysti »

Es funzt. Danke bobobo :bounce:
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten