(Datenbank)-Grid

Für allgemeine Fragen zur Programmierung mit PureBasic.
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

(Datenbank)-Grid

Beitrag von garfield9992003 »

Hallo zusammen.

Gibt es ein brauchbares Grid, um Datensätze tabellarisch darstellen zu können?

Ich habe mir CSGrid und EzGrid angesehen, jedoch benötige ich eine Möglichkeit in dem Grid auch neue Datensätze anlegen zu können.

Habt ihr da noch Ideen (oder doch Ideeen?!) oder Denkanstösse?

Ist ein richtiges Grid in absehbarer Zeit als festes Gedget in Pb geplant?

Grüsse

Frank
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

Wahrscheinlich bist du mit solchen Wünschen besser bei Delphi, Visual Basic oder PowerBuilder aufgehoben.
Benutzeravatar
mike41
Beiträge: 13
Registriert: 20.06.2006 09:00
Wohnort: Wassenberg
Kontaktdaten:

Grid für datensätze

Beitrag von mike41 »

Hi garfield!

vielleicht kann dir das helfen arbeite selber schon die ganze zeit damit.
Da sowas nicht existierte hab ich mir selber eins gebastelt.


Code: Alles auswählen

;a ListIconGadget with Binding an a Recordset ; Max 10 Columns
Procedure db_ListIconGadget(num.l,LigNum.l,x.l,y.l,Width.l,Height.l,Titelw.l,Flags.l,Tablename.s) 
                                                                                                   
ListIconGadget(ligNum, x, y, Width, Height, "", Titelw,Flags)
  db_Recordset_Open(num,Tablename,"","")
  column.l = DatabaseColumns(num)
  For col = 0 To column
    colName.s = DatabaseColumnName(num,col)
    AddGadgetColumn(ligNum,col,colName,100)
  Next col
  While NextDatabaseRow(num)
  a.s=GetDatabaseString(num,0)
  b.s=GetDatabaseString(num,1)
  c.s=GetDatabaseString(num,2)
  d.s=GetDatabaseString(num,3)
  e.s=GetDatabaseString(num,4)
  f.s=GetDatabaseString(num,5)
  g.s=GetDatabaseString(num,6)
  h.s=GetDatabaseString(num,7)
  i.s=GetDatabaseString(num,8)
  j.s=GetDatabaseString(num,9)
  AddGadgetItem(ligNum,-1,a+Chr(10)+b+Chr(10)+c+Chr(10)+d+Chr(10)+e+Chr(10)+f+Chr(10)+g+Chr(10)+h+Chr(10)+i+Chr(10)+j)
  Wend
    
EndProcedure 
Die ganze Include kannst Du bei mir runterladen mit Beispieldatei
PS:

http://people.freenet.de/mike.teesch

MfG Mike
PB 4.0
Wer programmiert greift ins volle Leben!
Herzrasen,Haareraufen aber auch jubeln und jauchzen ;-)
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

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.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
mannybass
Beiträge: 12
Registriert: 14.10.2004 10:33

Beitrag von mannybass »

Hier gibt es eines (kostenpflichtig, $29,95):
http://syberden.net/

Auf der Liberty Basic Seite wird Gutes darüber geschrieben.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

In den PBOSL Examples ist ein Beispiel für RaGrid, unter den Beispielen für
CreateGadget. Bietet zwar keine eingebaute Datenbank-Funktionalität,
irgendwas sollte man schon selber proggen :wink: , hilft aber Geld sparen,
das Grid selber kann eigentlich mehr als das kostenpflichtige
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

und sowas wird einem jetzt erst gesagt :evil:


:allright:
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

bobobo hat geschrieben:und sowas wird einem jetzt erst gesagt :evil:


:allright:
Selber Schuld, wer die Examples nicht lädt und ausprobiert :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
garfield9992003
Beiträge: 35
Registriert: 24.04.2005 03:49

Beitrag von garfield9992003 »

Danke für eure Antworten. Ich werde mir das am Abend mal gemütlich in den Kopf schrauben und berichten.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten