Deutsch
C ++ Forum

Programm stürzt ab

 

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
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
30.10.2008  
 




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
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
01.11.2008  
 



GetOpenFileName  [...]  innerhalb der SubClassProc kann imho nie lange gut gehen, denkt man alleine an hwndOwner der "OPENFILENAME Structure".
 
01.11.2008  
 




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
 
Windows XP, XProfan/Profan² 4.5 bis 11
Profan2Cpp-Homepage:  [...] 
Alte Profan²-Seite:  [...] 
02.11.2008  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

3.876 Betrachtungen

Unbenanntvor 0 min.
RICOSCH05.11.2014
XpKurt18.02.2014
macuto11.06.2012

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie