Auch kein DBGrid
aber für ne reine Darstellung geht's auch mit folgendem Code.
Dass das Ergebnis vorab erst in einer dynamischen Liste gespeichert
wird muss trotz etwas höherem Speicherverbrauch nicht unbedingt ein
Nachteil sein. Listen kann z.B. man sortieren (sortlist()) oder
sonstwie nett behandeln.
Code: Alles auswählen
If InitDatabase()=0
MessageRequester("","ODBC zu alt. Ein neueres ODBC gibt's bei Obi",0)
End
EndIf
Enumeration
#Window_0
#ListIcon_0
#Button_OK
#Button_Exit
#Datenbank
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 600, 300, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
;-
ListIconGadget(#ListIcon_0, 0, 120, WindowWidth(#window_0), WindowHeight(#window_0)-120, "", 100)
ButtonGadget(#Button_OK, 10, 10, 140, 30, "OK - neuladen")
ButtonGadget(#Button_Exit, 160, 10, 170, 30, "EXIT")
EndIf
EndIf
EndProcedure
Open_Window_0()
NewList result.s()
Repeat
Event = WaitWindowEvent()
WindowID = EventWindow()
GadgetID = EventGadget()
EventType = EventType()
If event=#PB_Event_SizeWindow
ResizeGadget(#Listicon_0,0, 120, WindowWidth(#window_0), WindowHeight(#window_0)-120)
EndIf
If Event = #PB_Event_Gadget
If GadgetID = #ListIcon_0
ElseIf GadgetID = #Button_OK
query.s="Select * from tabelle" ; hier die Abfrage rein
DBopen=OpenDatabase(#Datenbank,"Datenbank","User","Passwort")
row=0
If DatabaseQuery(#Datenbank,query)
ClearList (result())
lout.s=""
NbColumns = DatabaseColumns(#Datenbank)
lout+DatabaseColumnName(#datenbank,0)+Chr(10)
For c=1 To nbcolumns-1
lout+DatabaseColumnName(#datenbank,c)+Chr(10)
Next c
lout=Left(lout,Len(lout)-1)
; Liste füllen
AddElement(result())
result()=lout
While NextDatabaseRow(#Datenbank) ; alle Einträge durchlaufen
lout.s=""
For c=0 To nbcolumns
lout.s+GetDatabaseString(#Datenbank, c)+Chr(10)
Next c
While Right(lout,1)=Chr(10)
lout=Left(lout, Len(lout)-1 )
Wend
AddElement(result())
result()=lout
lout=""
row+1
Wend
If dbopen
CloseDatabase(#Datenbank)
dbopen=0
EndIf
;ListIcon aus Liste bestücken
FirstElement(result())
felder=CountString(result(),Chr(10))
ListIconGadget(#Listicon_0,0, 120, WindowWidth(#window_0), WindowHeight(#window_0)-120,StringField(result(),1,Chr(10)),20,#PB_ListIcon_GridLines)
For c=2 To felder+1
AddGadgetColumn(#Listicon_0, c, StringField(result(),c,Chr(10)), 20)
Next c
While NextElement(result())
AddGadgetItem(#Listicon_0,-1,result())
Wend
; Breite automatisch anpassen
For c=0 To felder
SendMessage_(GadgetID(#Listicon_0),#LVM_SETCOLUMNWIDTH,c,#LVSCW_AUTOSIZE_USEHEADER)
Next
Else
Debug query
Debug "Mag nicht abfragen"
EndIf
ElseIf GadgetID = #Button_Exit
If dbopen
CloseDatabase(#Datenbank)
dbopen=0
EndIf
End
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
Demo's wie man in Listicons Einträge direkt editieren kann gibt's übrigens im Codearchiv auf purearea.net (El Choni hatte 2003 mal was gemacht was mit ganz wenig Anpassung auch auf PB4 läuft)
Diese Änderung könnte dann auch gleich eine Änderung der Daten in der
Datenbank verursachen.
Es fehlt dann nur noch ein Zufügen von Daten im ListiconGadget (und DB)
in der letzten Zeile.