C ++ Forum | | | | Detlef Jagolski | Hallo Sebastian, wenn ich die Prozedur SaveAccess aufrufe stürzt mein Programm ab, kann’s Du mir einen Tipp geben. Unter XProfan läuft es ohne Probleme. Getestet mit Profan2cpp 2.0 Danke in voraus.
Gruß Detlef Syntay-Check: Keine Fehler oder Warnungen "CrogrammeDev-C++ing++.exe" -c PrfMain.cpp -o .objPrfMain.o -I"CrogrammeDev-C++include" -I"CrogrammeDev-C++includeg++" -L"CrogrammeDev-C++lib" -B"CrogrammeDev-C++in" -fexceptions -s -mwindows -w -O2 -fvtable-thunks -fno-elide-constructors "CrogrammeDev-C++ing++.exe" -c Vorlage_Neu.cpp -o .objVorlage_Neu.o -I"CrogrammeDev-C++include" -I"CrogrammeDev-C++includeg++" -L"CrogrammeDev-C++lib" -B"CrogrammeDev-C++in" -fexceptions -s -mwindows -w -O2 -fvtable-thunks -fno-elide-constructors "CrogrammeDev-C++ing++.exe" -o "Vorlage_Neu.exe" ".objPrfMain.o" ".objVorlage_Neu.o" ".esesource.o" ".libplibbase.lib" ".libplibstr.lib" ".libplibwin.lib" ".libplibfile.lib" ".libplibgdi.lib" ".libplibsql.lib" -luuid "CrogrammeDev-C++liblibglu32.a" "CrogrammeDev-C++liblibopengl32.a" "CrogrammeDev-C++liblibole32.a" "CrogrammeDev-C++liblibolepro32.a" "CrogrammeDev-C++liblibodbc32.a" "CrogrammeDev-C++liblibwsock32.a" "CrogrammeDev-C++liblibcomctl32.a" "CrogrammeDev-C++liblibwinmm.a" -I"CrogrammeDev-C++include" -I"CrogrammeDev-C++includeg++" -L"CrogrammeDev-C++lib" -B"CrogrammeDev-C++in" -fexceptions -s -mwindows -w -O2 -fvtable-thunks -fno-elide-constructors Finished.
Proc SaveAccess
Dim ItemText#,3584
Dim Speicher#,3584
Clear ItemText#
Clear Speicher#
FileName$ = SaveFile$("Speichern unter","Microsoft Access-Datenbank (*.mdb) | *.mdb")
If FileName$ <> ""
CreateAccess FileName$
AccessDB& = SQLInit("DSN=Microsoft Access-Datenbank;DBQ="+FileName$)
Set("SQLDBC",AccessDB&)
Set("SQLNULL","")
Set("SQLFile",SubStr$(FileName$, -1, ".") + ".DAT")
SQLString$ = "CREATE TABLE Projektdaten ([Projekt-Nr] TEXT, [Bezeichnung 1] TEXT, [Bezeichnung 2] TEXT, "
SQLString$ = SQLString$ + "[Schneidplantyp] TEXT, [Gewicht 1] TEXT, [Gewicht 2] TEXT, [Block Gewicht] TEXT, "
SQLString$ = SQLString$ + "[Block Länge] TEXT, "[Block Breite] TEXT, [Block Höhe] TEXT, [Teilung Länge] TEXT, "
SQLString$ = SQLString$ + "[Teilung Breite] TEXT, [Teilung Höhe] TEXT, [Schneidbreite Länge] TEXT, "
SQLString$ = SQLString$ + "[Schneidbreite Breite] TEXT, [Schneidbreite Höhe] TEXT)"
SQLExec SQLString$,2
ProjektNr$ = GetText$(Edit1&)
Bezeichnung_1$ = GetText$(Edit2&)
Bezeichnung_2$ = GetText$(Edit3&)
Schneidplantyp$ = GetText$(ChoiceBox1&)
Such_Gewicht_1$ = GetText$(Edit4&)
Such_Gewicht_2$ = GetText$(Edit5&)
Block_Gewicht$ = GetText$(Edit6&)
Block_Laenge$ = GetText$(Edit7&)
Block_Breite$ = GetText$(Edit8&)
Block_Hoehe$ = GetText$(Edit9&)
Teilung_Laenge$ = GetText$(SpinEdit1&)
Teilung_Breite$ = GetText$(SpinEdit2&)
Teilung_Hoehe$ = GetText$(SpinEdit3&)
Schnitt_Laenge$ = GetText$(Edit10&)
Schnitt_Breite$ = GetText$(Edit11&)
Schnitt_Hoehe$ = GetText$(Edit12&)
SQLString$ = "INSERT INTO Projektdaten VALUES (:ProjektNr$,:Bezeichnung_1$,:Bezeichnung_2$,:Schneidplantyp$,"
SQLString$ = SQLString$ + ":Such_Gewicht_1$,:Such_Gewicht_2$,:Block_Gewicht$,:Block_Laenge$,:Block_Breite$,"
SQLString$ = SQLString$ + ":Block_Hoehe$,:Teilung_Laenge$)"
SQLExec SQLString$,2
IfNot GetLines(ListView1&) = 0
If GetText$(ChoiceBox1&) = "Standard"
SQLString$ = "CREATE TABLE Schneidpläne ([Lfd-Nr] TEXT, [Maß aus Länge] TEXT, [Maß aus Breite] TEXT, "
SQLString$ = SQLString$ + "[Maß aus Höhe] TEXT, Teilung Länge] TEXT, [Teilung Breite] TEXT, "
SQLString$ = SQLString$ + "[Teilung Höhe] TEXT, [Produktanzahl] TEXT, [Ausbeute] TEXT, [Produktgewicht] TEXT)"
SQLExec SQLString$,2
Clear Zeile&
Repeat
Clear ItemText#
Clear Speicher#
GetLineText(ListView1&,Zeile&,ItemText#)
GetTabOffsets(ItemText#,Speicher#)
Zähler$ = String$(ItemText#,Long(Speicher#,0))
Portions_Laenge$ = String$(ItemText#,Long(Speicher#,4))
Portions_Breite$ = String$(ItemText#,Long(Speicher#,8))
Portions_Hoehe$ = String$(ItemText#,Long(Speicher#,12))
Teilung_Laenge$ = String$(ItemText#,Long(Speicher#,16))
Teilung_Breite$ = String$(ItemText#,Long(Speicher#,20))
Teilung_Hoehe$ = String$(ItemText#,Long(Speicher#,24))
Block_Portionen$ = String$(ItemText#,Long(Speicher#,28))
Block_Ausbeute$ = String$(ItemText#,Long(Speicher#,32))
Portions_Gewicht$ = String$(ItemText#,Long(Speicher#,36))
SQLString$ = "INSERT INTO Schneidpläne VALUES (:Zähler$,:Portions_Laenge$,:Portions_Breite$,:Portions_Hoehe$,"
SQLString$ = SQLString$ + ":Teilung_Laenge$,:Teilung_Breite$,:Teilung_Hoehe$,:Block_Portionen$,:Block_Ausbeute$,"
SQLString$ = SQLString$ + ":Portions_Gewicht$)"
SQLExec SQLString$,2
Inc Zeile&
Until Zeile& = GetLines(ListView1&)
ElseIf GetText$(ChoiceBox1&) = "Offset"
SQLString$ = "CREATE TABLE Schneidpläne ([Lfd-Nr] TEXT, [Maß aus Länge] TEXT, [Maß aus Breite] TEXT, "
SQLString$ = SQLString$ + "[Maß aus Länge] TEXT, [Maß aus Breite] TEXT, [Maß aus Höhe] TEXT, "
SQLString$ = SQLString$ + "[Teilung Länge 1] TEXT, [Teilung Länge 2] TEXT, [Teilung Breite] TEXT, "
SQLString$ = SQLString$ + "[Teilung Höhe] TEXT, [Produktanzahl] TEXT, [Ausbeute] TEXT, "
SQLString$ = SQLString$ + "[Produktgewicht 1] TEXT, [Produktgewicht 2] TEXT)"
SQLExec SQLString$,2
Clear Zeile&
Repeat
Clear ItemText#
Clear Speicher#
GetLineText(ListView1&,Zeile&,ItemText#)
GetTabOffsets(ItemText#,Speicher#)
Zähler$ = String$(ItemText#,Long(Speicher#,0))
Portions_Laenge$ = String$(ItemText#,Long(Speicher#,4))
Riegel_Breite_1$ = String$(ItemText#,Long(Speicher#,8))
Portions_Laenge_2$ = String$(ItemText#,Long(Speicher#,12))
Riegel_Breite_2$ = String$(ItemText#,Long(Speicher#,16))
Portions_Hoehe$ = String$(ItemText#,Long(Speicher#,20))
Schnitt_Anzahl_Laenge$ = String$(ItemText#,Long(Speicher#,24))
Schnitt_Anzahl_Laenge_2$ = String$(ItemText#,Long(Speicher#,28))
Schnitt_Anzahl_Breite$ = String$(ItemText#,Long(Speicher#,32))
Schnitt_Anzahl_Hoehe$ = String$(ItemText#,Long(Speicher#,36))
Block_Portionen_1$ = String$(ItemText#,Long(Speicher#,40))
Block_Ausbeute_1$ = String$(ItemText#,Long(Speicher#,44))
Portions_Gewicht_1$ = String$(ItemText#,Long(Speicher#,48))
Portions_Gewicht_2$ = String$(ItemText#,Long(Speicher#,52))
SQLString$ = "INSERT INTO Schneidpläne VALUES (:Zähler$,:Portions_Laenge$,:Riegel_Breite_1$,"
SQLString$ = SQLString$ + ":Portions_Laenge_2$,:Riegel_Breite_2$,:Portions_Hoehe$,"
SQLString$ = SQLString$ + ":Schnitt_Anzahl_Laenge$,:Schnitt_Anzahl_Laenge_2$,:Schnitt_Anzahl_Breite$,"
SQLString$ = SQLString$ + ":Schnitt_Anzahl_Laenge_2$,:Schnitt_Anzahl_Breite$,:Schnitt_Anzahl_Hoehe$,"
SQLString$ = SQLString$ + ":Block_Portionen_1$,:Block_Ausbeute_1$,:Portions_Gewicht_1$,:Portions_Gewicht_2$)"
SQLExec SQLString$,2
Inc Zeile&
Until Zeile& = GetLines(ListView1&)
EndIf
EndIf
SQLDone
EndIf
Dispose ItemText#
Dispose Speicher#
EndProc
|
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 29.10.2008 ▲ |
| |
| | Sebastian König | Hallo Detlef,
ich werde mal nachsehen, was da schiefläuft. Leider ist es mit dem Ausschnitt allein sehr schwer, etwas konkretes zu sagen... Kannst Du mir (per eMail oder PM) evtl. einen komplett lauffähigen Code zum Testen schicken?
Danke,
Sebastian |
| | | | |
| | Detlef Jagolski | Hallo Sebastian, den Fehler habe ich soweit eingrenzen können, dass der Fehler hier liegen muss: FileName$ = SaveFile$("Speichern unter","Microsoft Access-Datenbank (*.mdb) | *.mdb") Wenn ich es ohne Subclassing mache geht es, wenn ich SaveFile$... aus der Subclass Prozedur Starte, stürzt das Programm ab.
Gruß
Detlef
Def &WM_GETMINMAXINFO 36
Def &WM_RBUTTONDOWN 516
Declare MinMaxInfo#
SubClassProc
If SubClassMessage(%hwnd, &WM_GETMINMAXINFO)
Fenstergrösse einschränken
Dim MinMaxInfo#,40
MinMaxInfo# = &sLParam
Long MinMaxInfo#,24 = 871
Long MinMaxInfo#,28 = 563
Long MinMaxInfo#,32 = %MaxX
Long MinMaxInfo#,36 = %MaxY
Dispose MinMaxInfo#
Set("WinProc",0)
ElseIf SubClassMessage(%hwnd, &WM_RBUTTONDOWN)
Test
Set("WinProc", 0)
EndIf
EndProc
Proc Test
FileName$ = SaveFile$("Speichern unter","Microsoft Access-Datenbank (*.mdb) | *.mdb")
EndProc
Declare appexit%, FileName$
WindowTitle "DesignForm"
Window %maxX + 5,0 - 871,563
cls
Set("SubClassMode",1)
SubClass %hwnd,1
SetWindowPos %hwnd = 0,0 - 871,563;0
Test
WhileNot appexit%
WaitInput
If %key = 2
appexit%=1
ElseIf %key = 4
Fenstergröße
ElseIf %key = 5
Hilfe
EndIf
|
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 30.10.2008 ▲ |
| |
| | Sebastian König | Hallo Detlef,
sorry, dass ich mich jetzt erst wieder melde. Leider bin ich gestern nicht dazu gekommen, mich mit der Sache zu beschäftigen.
Danke auf jeden Fall für den Code - ich kann den Fehler damit nachvollziehen. Spontan bin ich allerdings nicht so sicher, ob ich da etwas machen kann. Solche Aufrufe von Dialogen aus der SubClassProc heraus sind allgemein nicht empfehlenswert - auch in XProfan selbst nicht (möglicherweise ist es nur Zufall, dass der Code damit funktioniert). Der in der XProfan-Hilfe empfohlene Weg ist die Verwendung von SetMenuItem und somit die Verlagerung der eigentlichen Aktion in die Progamm-Hauptschleife.
Ich werde trotzdem mal gucken, ob ich es evtl. so wie es ist zum Laufen bringen kann.
MfG
Sebastian |
| | | | |
| | | GetOpenFileName [...] innerhalb der SubClassProc kann imho nie lange gut gehen, denkt man alleine an hwndOwner der "OPENFILENAME Structure". |
| | | | |
| | Detlef Jagolski | Hallo Sebastian,
kein Problem, Deine Ausbildung und Dein privat Leben gehen vor. Habe inzwischen es auch mit SetMenuItem gelöst.
Danke und Gruß
Detlef |
| | | XProfan X4, PRFellow, Profan2Cpp - Version 2.0c-pre5, Windows 11 | 01.11.2008 ▲ |
| |
| | Sebastian König | Hallo Detlef,
danke für Dein Verständnis . Ich habe inzwischen eine Idee, was ich evtl. ändern könnte um den ursprünglichen Code zum Laufen zu bringen und werde das mal ausprobieren. Die Lösung für mit SetMenuItem halte ich allerdings in jedem Fall für besser und sicherer...
MfG
Sebastian |
| | | | |
|
AntwortenThemenoptionen | 3.876 Betrachtungen |
ThemeninformationenDieses Thema hat 3 Teilnehmer: |