Hab mich seit langer Zeit mal wieder mit PB beschäftigt und festgestellt, dass es immer noch viele fragen zur Datenbankprogrammierung mit PB gibt.
Hier mal ein Code zum ausprobieren. Ist mit PB 4.0 getestet und funktioniert bei mir einwandfrei.
Code: Alles auswählen
#ODBC_ADD_DSN = 1 
#ODBC_REMOVE_DSN = 3
  If InitDatabase() = 0 
    MessageRequester("ODBC Error", "Can't initialize the database drivers", #PB_MessageRequester_Ok) 
  EndIf 
Procedure db_Connect(num.l, dbFile.s, dbUser.s, dbPass.s) ;dbFile = vollständiger Datenbankpfad incl. name der Accessdatei
     
  dbName.s = GetFilePart(dbFile.s) 
  dbPath.s = GetPathPart(dbFile.s) 
  strAtt.s = "Server=MyOwnServer" + ";" 
  strAtt.s + "DSN="           + dbName.s + ";" 
  strAtt.s + "Description="   + dbName.s + ";" 
  strAtt.s + "DefaultDir=" + dbPath.s + ";" 
  strAtt.s + "DBQ="           + dbName.s + ";" 
  strAtt.s + "UID="           + dbUser.s + ";" 
  strAtt.s + "PWD="           + dbPass.s + ";" 
   
  MyMemory = AllocateMemory(Len(strAtt)) 
   
  CopyMemory(@strAtt, MyMemory, Len(strAtt)) 
   
  For L = 1 To Len(strAtt) 
    If PeekB(MyMemory + l - 1) = Asc(";") 
      PokeB(MyMemory  + l - 1, 0) 
    EndIf 
  Next L 
   
  Result = SQLConfigDataSource_(num, #ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)", MyMemory) 
   
  FreeMemory(MyMemory) 
     
  If Result 
   
     
    If OpenDatabase(num,  dbName.s,  dbUser.s,  dbPass.s) <> 0 
     
       
      ProcedureReturn 1 
    Else 
     
       
      MessageRequester("ODBC Error", "Can't open the database connection", #PB_MessageRequester_Ok) 
      ProcedureReturn 0 
    EndIf 
  Else 
    MessageRequester("ODBC Error", "Can't configure sql data source", #PB_MessageRequester_Ok) 
  ProcedureReturn -1 
  EndIf 
EndProcedure
Procedure db_Disconnect(num.l,dbName.s) ; dbName = Name des erstellten DSN
  strAtt.s + "DSN="           + dbName.s + ";" 
   
  MyMemory = AllocateMemory(Len(strAtt)) 
   
  CopyMemory(@strAtt, MyMemory, Len(strAtt)) 
   
  For L = 1 To Len(strAtt) 
    If PeekB(MyMemory + l - 1) = Asc(";") 
      PokeB(MyMemory  + l - 1, 0) 
    EndIf 
  Next L 
   
  Result = SQLConfigDataSource_(num, #ODBC_REMOVE_DSN, "Microsoft Access Driver (*.mdb)", MyMemory) 
   
  FreeMemory(MyMemory) 
     
EndProcedure
Code: Alles auswählen
Procedure Open_Window_1()
  If OpenWindow(#Window_1, 216, 50, 800, 600, "Kunden",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    
    DatabaseQuery(0,"select * from kunden")
    
    If CreateMenu(#MenuBar_1, WindowID(#Window_1))
      MenuTitle("Kunde")
      MenuItem(#MENU_9, "...anlegen")
      MenuItem(#MENU_10, "...bearbeiten")
      MenuItem(#MENU_11, "...löschen")
      MenuBar()
      MenuItem(#MENU_12, "Beenden")
      EndIf
      If CreateGadgetList(WindowID(#Window_1))
        ButtonGadget(#Button_0, 655, 95, 120, 25, "Rechnungsdaten")
        ButtonGadget(#Button_1, 655, 126, 120, 25, "Zusatzdaten")
        ButtonGadget(#Button_3, 655, 157, 120, 25, "Pkw")
        
        ;-
        ListIconGadget(#ListIcon_0, 35, 95, 600, 400, "KundenNr", 100, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
        AddGadgetColumn(#ListIcon_0, 1, "Vorname", 100)
        AddGadgetColumn(#ListIcon_0, 2, "Nachname", 100)
        AddGadgetColumn(#ListIcon_0, 3, "Telefon", 100)
        While NextDatabaseRow(0)
          KundenNr.s=GetDatabaseString(0,0)
          Vorname.s=GetDatabaseString(0,1)
          Nachname.s=GetDatabaseString(0,2)
          Telefon.s=GetDatabaseString(0,6)
          AddGadgetItem(#ListIcon_0,-1,KundenNr.s+Chr(10)+Vorname+Chr(10)+Nachname+Chr(10)+Telefon)
        Wend
        SetGadgetItemState(#ListIcon_0,0,#PB_ListIcon_Selected)
        
      EndIf
    EndIf
EndProcedure
Code: Alles auswählen
      DatabaseQuery(0,"select * from kunden where kundennr = '"+dbSelect+"'")
      NextDatabaseRow(0)
              
              KundenNr.s=GetDatabaseString(0,0)
              Vorname.s=GetDatabaseString(0,1)
              Nachname.s=GetDatabaseString(0,2)
              Adresse.s=GetDatabaseString(0,3)
              Ort.s=GetDatabaseString(0,4)
              Plz.s=GetDatabaseString(0,5)
              Telefon.s=GetDatabaseString(0,6)
              Mobil.s=GetDatabaseString(0,7)
              
              SetGadgetText(#String_0,KundenNr)
              SetGadgetText(#String_1,Vorname)
              SetGadgetText(#String_2,Nachname)
              SetGadgetText(#String_3,Adresse)
              SetGadgetText(#String_4,Ort)
              SetGadgetText(#String_5,Plz)
              SetGadgetText(#String_6,Telefon)
              SetGadgetText(#String_7,Mobil)
Code: Alles auswählen
      KundenNr.s=GetGadgetText(#String_0)
      Vorname.s=GetGadgetText(#String_1)
      Nachname.s=GetGadgetText(#String_2)
      Adresse.s=GetGadgetText(#String_3)
      Ort.s=GetGadgetText(#String_4)
      Plz.s=GetGadgetText(#String_5)
      Telefon.s=GetGadgetText(#String_6)
      Mobil.s=GetGadgetText(#String_7)
      DatabaseUpdate(0,"update kunden set vorname='"+vorname+"',nachname='"+nachname+"',adresse='"+adresse+"',ort='"+ort+"',plz='"+plz+"',telefon='"+telefon+"',mobil='"+mobil+"' where kundennr='"+kundennr+"'")
     
      CloseWindow(#Window_2)
      DisableWindow(#Window_1,0)
      SetActiveWindow(#Window_1)
      DatabaseQuery(0,"select * from kunden")
      ClearGadgetItemList(#ListIcon_0)
      While NextDatabaseRow(0)
        KundenNr.s=GetDatabaseString(0,0)
        Vorname.s=GetDatabaseString(0,1)
        Nachname.s=GetDatabaseString(0,2)
        Telefon.s=GetDatabaseString(0,6)
        AddGadgetItem(#ListIcon_0,-1,KundenNr.s+Chr(10)+Vorname+Chr(10)+Nachname+Chr(10)+Telefon)
      Wend
      SetGadgetItemState(#ListIcon_0,0,#PB_ListIcon_Selected)
Mfg Mike
