Mit einer Vorlage von TS-Soft habe ich es geschafft meine Stammdaten für eine Ersatzteildatenbank zu pflegen.
Jetzt komme ich aber nicht weiter.
1. Das DatGadet wird einfach nicht als String mit dem ausgewählten Datum übernommen.
2. Wie kann ich die Lieferscheinnummer eingeben.
Im ListViewGadget wollte ich dann die Artikelnummer eingeben (Bezeichnung aus den Stammdaten holen) und den die Stückzahl.
In die Datenbank soll dann bei Artikelbewegung in jeden Datensatz das Datum, Lieferscheinnummer, Artikelnummer, Anzahl Eingang geschrieben werden.
Vielleicht kann jemand bei den einen oder anderen Punkt eine Hilfe geben.
Gruß Burkhard
Ich benutze Version 5.1 (x64) unter Windows7 (Registriert)
Programm Stammdatenpflege: (Funktioniert)
Code: Alles auswählen
; *******************************************************************************
; ****************** ********************
; ****************** Vielen Dank für die sehr Gute Vorlage ********************
; ****************** der Musterdatenbank an ts-soft ********************
; ****************** ********************
; *******************************************************************************
EnableExplicit
UseSQLiteDatabase()
#DatenDB = 0
#frm_Main = 0
Enumeration ; Gadgets
#gad_Panel
#gad_ListStammdaten
#gad_Container
;#gad_strName
;#gad_strVorname
;#gad_strStrasse
;#gad_strPLZ
;#gad_strOrt
;#gad_strTelefon
#gad_btnHinzufuegen
#gad_btnAendern
#gad_btnLoeschen
#gad_btnSortieren
; ******************************** eigene Felder ********************
#gad_strDatum
#gad_strLieferscheinnummer
#gad_strArtikelnummer
#gad_strBezeichnung
#gad_strAB_Nummer
#gad_strJob_Nummer
#gad_strBestand
#gad_strEingang
#gad_strAusgang
; ******************************** Ende eigene Felder ***************
EndEnumeration
Declare CreateFormMain()
Declare DatenSatzHinzufuegen()
Declare DatenSatzAendern()
Declare DatenSatzLoeschen()
Declare ListFuellen()
Define Ergebnis = 0
Define db_name.s = "Daten.db"
db_name.s = "Daten.db"
Define SQL.s
; Wir überprüfen ob die DB bereits existiert, wenn nicht, wird eine leere DB erstellt.
If FileSize(db_name) <= 0
If CreateFile(0, db_name)
CloseFile(0)
If OpenDatabase(#DatenDB, db_name, "", "")
; Wir erstellen die Tabelle stammdaten, hierfür ist die SQL-Anweisung:
; "CREATE TABLE name_der_tabelle (feldname [typ], feldname [typ], ...)" verantwortlich
; Der Typ des Feldes ist bei SQLite meist optional, deshalb werden wir diesen auch meist weglassen.
; Ausnahme von dieser Regel ist ein eindeutiger Identifier und ein Blob. Dieser ist immer vom Typ INTEGER, bzw. BLOB
; Syntax für ID-Feld: feldname INTEGER PRIMARY KEY AUTOINCREMENT
; Es empfiehlt sich die SQL-Anweisung auf mehrere Zeilen aufzuteilen.
SQL = "CREATE TABLE stammdaten (id INTEGER PRIMARY KEY AUTOINCREMENT,"
SQL + " artikelnummer CHAR(14), bezeichnung CHAR(50), fotodata BLOB, fotosize INTEGER)"
; Wenn wir kein Ergebnis benötigen, verwenden wir: DatabaseUpdate(id, SQL-Anweisung),
; ansonsten DatabaseQuery(id, SQL-Anweisung) was wir später noch sehen werden.
If DatabaseUpdate(#DatenDB, SQL) = #False
Debug DatabaseError()
End
EndIf
; *********************** Tabelle Artikelbewegung einfügen ******************************
SQL = "CREATE TABLE artikelbewegung (id INTEGER PRIMARY KEY AUTOINCREMENT,"
SQL + " datum DATE, lieferscheinnummer INTEGER, artikelnummer CHAR(14), abnummer INTEGER, jobnummer INTEGER, eingang INTEGER, ausgang INTEGER)"
If DatabaseUpdate(#DatenDB, SQL) = #False
Debug DatabaseError()
End
EndIf
; *********************** Ende Tabelle Artikelbewegung einfügen *************************
Else
Debug DatabaseError()
End
EndIf
Else
Debug db_name + " konnte nicht erstellt werden."
End
EndIf
Else ; Datenbank existiert bereits und wird geöffnet.
If OpenDatabase(#DatenDB, db_name, "", "") = #False
Debug DatabaseError()
End
EndIf
EndIf
; Sicherung der Datenbank erstellen
Ergebnis = CopyFile("Daten.db", "Datenold.db")
;Debug ergebnis
If Ergebnis = 0
MessageRequester("Fehler", "Daten.db" + " konnte nicht gesichert werden!")
EndIf
CreateFormMain()
Define i
; Jetzt wird unser ListIconGadget mit Daten gefüllt
ListFuellen()
; Hier beginnt unser MainLoop.
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
CloseDatabase(#DatenDB)
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #gad_ListStammdaten
Select EventType()
Case #PB_EventType_Change
i = GetGadgetState(#gad_ListStammdaten)
If i > -1
SetGadgetText(#gad_strArtikelnummer, GetGadgetItemText(#gad_ListStammdaten, i, 1))
SetGadgetText(#gad_strBezeichnung, GetGadgetItemText(#gad_ListStammdaten, i, 2))
; SetGadgetText(#gad_strBestand, GetGadgetItemText(#gad_ListStammdaten, i, 3))
; SetGadgetText(#gad_strPLZ, GetGadgetItemText(#gad_ListStammdaten, i, 4))
; SetGadgetText(#gad_strOrt, GetGadgetItemText(#gad_ListStammdaten, i, 5))
; SetGadgetText(#gad_strTelefon, GetGadgetItemText(#gad_ListStammdaten, i, 6))
Else
SetGadgetText(#gad_strArtikelnummer, "")
SetGadgetText(#gad_strBezeichnung, "")
;SetGadgetText(#gad_strBestand, "")
;SetGadgetText(#gad_strPLZ, "")
;SetGadgetText(#gad_strOrt, "")
;SetGadgetText(#gad_strTelefon, "")
EndIf
EndSelect
Case #gad_btnHinzufuegen ; Datensatz anfügen
DatenSatzHinzufuegen()
Case #gad_btnAendern
If GetGadgetState(#gad_ListStammdaten) > -1
DatenSatzAendern()
Else
MessageRequester("SQLite Tutorial", "Bitte erst den zu ändernden Datensatz selektieren!")
EndIf
Case #gad_btnLoeschen
If GetGadgetState(#gad_ListStammdaten) > -1
DatenSatzLoeschen()
Else
MessageRequester("SQLite Tutorial", "Bitte erst den zu löschenden Datensatz selektieren!")
EndIf
Case #gad_btnSortieren
ListFuellen()
EndSelect
EndSelect
ForEver
End
Procedure ListFuellen()
; Jetzt wird unser ListIconGadget mit Daten gefüllt
; hierfür ist die SQL-Anweisung SELECT zuständig. Das * steht für alles und hinter FROM wird die Tabelle angegeben
; ORDER BY feldname sorgt für eine Sortierung!
Protected itemtext.s, i
ClearGadgetItems(#gad_ListStammdaten)
If DatabaseQuery(#DatenDB, "SELECT * FROM stammdaten ORDER BY artikelnummer")
While NextDatabaseRow(#DatenDB)
itemtext = GetDatabaseString(#DatenDB, 0) ; unsere versteckte eindeutige ID
For i = 1 To 2 ; Artikelnummer, Bezeichnung!
itemtext + #LF$ + GetDatabaseString(#DatenDB, i)
Next
AddGadgetItem(#gad_ListStammdaten, -1, itemtext)
Wend
FinishDatabaseQuery(#DatenDB); Diese Funktion ist immer nach einem Query auszuführen!
Else
Debug DatabaseError()
EndIf
EndProcedure
Procedure DatenSatzHinzufuegen()
Protected.s SQL, id, artikelnummer, bezeichnung, itemtext
artikelnummer = GetGadgetText(#gad_strArtikelnummer)
bezeichnung = GetGadgetText(#gad_strBezeichnung)
; bestand = GetGadgetText(#gad_strBestand)
; plz = GetGadgetText(#gad_strPLZ)
; ort = GetGadgetText(#gad_strOrt)
; telefon = GetGadgetText(#gad_strTelefon)
; Hierfür ist die SQL-Anweisung: "INSERT INTO ..." zuständig!
SQL = "INSERT INTO stammdaten (artikelnummer, bezeichnung) "
SQL + "VALUES ('"
SQL + artikelnummer + "','"
;SQL + bezeichnung + "','"
;SQL + strasse + "','"
;SQL + plz + "','"
;SQL + ort + "','"
SQL + bezeichnung + "')"
If DatabaseUpdate(#DatenDB, SQL) ; Eintragen in die DB.
; Jetzt benötigen wir noch die automatisch generierte ID um sie in unsere Liste einzutragen
If DatabaseQuery(#DatenDB, "SELECT last_insert_rowid()")
NextDatabaseRow(#DatenDB)
id = GetDatabaseString(#DatenDB, 0)
FinishDatabaseQuery(#DatenDB)
itemtext = id + #LF$ + artikelnummer + #LF$ + bezeichnung
AddGadgetItem(#gad_ListStammdaten, -1, itemtext)
EndIf
Else
Debug DatabaseError()
EndIf
EndProcedure
Procedure DatenSatzAendern()
Protected.s SQL, id, artikelnummer, bezeichnung, itemtext
Protected item
artikelnummer = GetGadgetText(#gad_strArtikelnummer)
bezeichnung = GetGadgetText(#gad_strBezeichnung)
;bestand = GetGadgetText(#gad_strBestand)
; plz = GetGadgetText(#gad_strPLZ)
; ort = GetGadgetText(#gad_strOrt)
; telefon = GetGadgetText(#gad_strTelefon)
; ID des selektierten Eintrags ermitteln
item = GetGadgetState(#gad_ListStammdaten)
id = GetGadgetItemText(#gad_ListStammdaten, item, 0)
; Zum ändern nutzen wir die SQL-Anweisung: "UPDATE tabellenname SET"
SQL = "UPDATE stammdaten SET "
SQL + "artikelnummer = '" + artikelnummer + "',"
SQL + "bezeichnung = '" + bezeichnung + "' " ; bei weiteren Feldern auf das Komma(,) achten!!
;SQL + "bestand = '" + bestand + "' "
; SQL + "plz = '" + plz + "',"
; SQL + "ort = '" + ort + "',"
; SQL + "telefon = '" + telefon + "' "
SQL + "WHERE id = " + id
If DatabaseUpdate(#DatenDB, SQL) = #False
Debug DatabaseError()
Else
SetGadgetItemText(#gad_ListStammdaten, item, artikelnummer, 1)
SetGadgetItemText(#gad_ListStammdaten, item, bezeichnung, 2)
;SetGadgetItemText(#gad_ListStammdaten, item, bestand, 3)
;SetGadgetItemText(#gad_ListStammdaten, item, plz, 4)
;SetGadgetItemText(#gad_ListStammdaten, item, ort, 5)
;SetGadgetItemText(#gad_ListStammdaten, item, telefon, 6)
EndIf
EndProcedure
Procedure DatenSatzLoeschen()
Protected.s SQL, id
Protected item
item = GetGadgetState(#gad_ListStammdaten)
id = GetGadgetItemText(#gad_ListStammdaten, item, 0)
SQL = "DELETE FROM stammdaten WHERE id = " + id
If DatabaseUpdate(#DatenDB, SQL) = #False
Debug DatabaseError()
Else
RemoveGadgetItem(#gad_ListStammdaten, item)
EndIf
EndProcedure
Procedure CreateFormMain()
Protected ListIconFlags = #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
ListIconFlags | #PB_ListIcon_AlwaysShowSelection
CompilerEndIf
OpenWindow(#frm_Main, #PB_Ignore, #PB_Ignore, 640, 480, "Stammdaten bearbeiten")
PanelGadget(#gad_Panel, 0, 0, 640, 415)
AddGadgetItem(#gad_Panel, -1, "Stammdaten")
ListIconGadget(#gad_ListStammdaten, 5, 5, GetGadgetAttribute(#gad_Panel, #PB_Panel_ItemWidth) - 10, GetGadgetAttribute(#gad_Panel, #PB_Panel_ItemHeight) - 10, "id", 1, ListIconFlags)
; die erste Spalte verwaltet die eindeutige ID und ist nicht sichtbar! (groesse von 0 ist unter Linux nicht erlaubt, deshalb 1)
AddGadgetColumn(#gad_ListStammdaten, 1, "Artikelnummer", 140)
AddGadgetColumn(#gad_ListStammdaten, 2, "Bezeichnung", 150)
; AddGadgetColumn(#gad_ListStammdaten, 3, "Bestand", 110)
; AddGadgetColumn(#gad_ListStammdaten, 4, "PLZ", 45)
; AddGadgetColumn(#gad_ListStammdaten, 5, "Ort", 125)
; AddGadgetColumn(#gad_ListStammdaten, 6, "Telefon", 90)
CloseGadgetList()
ContainerGadget(#gad_Container, 5, 420, 630, 60)
StringGadget(#gad_strArtikelnummer, 5, 0, 110, 25, "")
StringGadget(#gad_strBezeichnung, 120, 0, 400, 25, "")
; StringGadget(#gad_strBestand, 550, 0, 60, 25, "")
; StringGadget(#gad_strPLZ, 355, 0, 45, 25, "")
; StringGadget(#gad_strOrt, 400, 0, 125, 25, "")
; StringGadget(#gad_strTelefon, 525, 0, 95, 25, "")
ButtonGadget(#gad_btnHinzufuegen, 5, 30, 100, 25, "Hinzufügen")
ButtonGadget(#gad_btnAendern, 115, 30, 80, 25, "Ändern")
ButtonGadget(#gad_btnLoeschen, 205, 30, 80, 25, "Löschen")
ButtonGadget(#gad_btnSortieren, 540, 30, 80, 25, "Sortieren")
CloseGadgetList()
EndProcedure
Programm Artikeleingang:
Code: Alles auswählen
; *******************************************************************************
; ****************** ********************
; ****************** Vielen Dank für die sehr Gute Vorlage ********************
; ****************** der Musterdatenbank an ts-soft ********************
; ****************** ********************
; *******************************************************************************
EnableExplicit
UseSQLiteDatabase()
#DatenDB = 0
#frm_Main = 0
Enumeration ; Gadgets
#gad_Panel
#gad_ListStammdaten
#gad_Container
#gad_btnHinzufuegen
#gad_btnAendern
#gad_btnLoeschen
#gad_btnSortieren
; ******************************** eigene Felder ********************
#gad_Text1
#gad_text2
#gad_strDatum
#gad_strLieferscheinnummer
#gad_strArtikelnummer
#gad_strBezeichnung
;#gad_strAB_Nummer
;#gad_strJob_Nummer
#gad_strBestand
#gad_strEingang
#gad_Botten_abbrechen
#gad_botten_speichern
;#gad_strAusgang
; ******************************** Ende eigene Felder ***************
EndEnumeration
Declare CreateFormMain()
Declare DatenSatzHinzufuegen()
Declare DatenSatzAendern()
Declare DatenSatzLoeschen()
Declare ListFuellen()
Define Test$
Define Text$
Define Ergebnis
Define Datum = 0
Define Datumneu
Define db_name.s = "Daten.db"
db_name.s = "Daten.db"
Define SQL.s
; Wir überprüfen ob die DB bereits existiert, wenn nicht, Fehlermeldung
If FileSize(db_name) <= 0
MessageRequester("Fehler", "Daten.db" + " Existiert nicht!") : End
EndIf
If OpenDatabase(#DatenDB, db_name, "", "") = #False
Debug DatabaseError()
End
EndIf
; Sicherung der Datenbank erstellen
Ergebnis = CopyFile("Daten.db", "Datenold.db")
;Debug ergebnis
If Ergebnis = 0
MessageRequester("Fehler", "Daten.db" + " konnte nicht gesichert werden!")
EndIf
; ********************************* Beginn Eingang von Artikeln ************************************************
If OpenWindow(0, 5, 10, 880, 750, "Eingabe Ersatzteileingang", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_WindowCentered)
SetWindowColor(0, RGB(192,192,192))
TextGadget(#gad_Text1, 10, 10, 180, 40, "Text 1")
TextGadget(#gad_Text2, 400, 10, 180, 40, "Text 2")
DateGadget(#gad_strDatum, 10, 100, 280, 50, "Lieferschein Datum: %dd.%mm.%yyyy ")
TextGadget(#gad_strLieferscheinnummer, 400,100,280,50, "Lieferscheinnummer")
SetGadgetItemText(#gad_strLieferscheinnummer, 0, "" )
ButtonGadget(#gad_botten_speichern, 300, 650, 200, 50, "Speichern")
ButtonGadget(#gad_Botten_abbrechen, 630, 650, 200, 50, "Abbrechen")
ListViewGadget(3, 10, 220, 820, 400)
Datum = GetGadgetState( #gad_strDatum)
If datum <> Datumneu
datumneu = Datum
Text$ = FormatDate("%dd, %mm, %yyyy", Datumneu)
Debug Datumneu
Debug Text$
Debug #gad_strLieferscheinnummer
Else
Text$ = FormatDate("%dd, %mm, %yyyy", Datum)
Debug Datum
Debug Text$
EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf