MySQL - Access Violation

Vorstellungen von Programmen, welche mit Lazarus erstellt worden.

MySQL - Access Violation

Beitragvon Cuci » 14. Jul 2016, 19:49 MySQL - Access Violation

Hallo,
ich bin dabei, mein Vermietungsprogramm von Delphi (Windows) auf Lazarus (Linux Mint 17.2 Cinnamon) zu portieren. Wegen der Komplexität habe ich es aufgegeben, die automatische Umwandlung zu benutzen. Ich mache es von Grund auf neu.

Die MySQL-Datenbank mit allen Tabellen ist vorhanden und in phpmyadmin einzusehen. Ich habe als erste Maßnahme ein Tabsheet erstellt und für die Mieter-Tabelle die Eingabefelder und ein Übersichts-Grid auf ein Sheet aufgebaut. Die Daten werden angezeigt, die Verbindung zur Datenbank ist also, so sollte man meinen, oK. Ich bekomme trotz der erfolgreichen Kompilierung eine Fehlermeldung:

Access violation.

Press OK to ignore and risk data corruption.
Press Cancel to kill the program.

Die Daten werden auf dem Sheet in den Feldern und im Grid nicht angezeigt. Mein Einstieg sieht so aus:
______________________________________________
private
{ private declarations }
public
{ public declarations }
end;
var
body: Tbody;
implementation
uses fdata;
{$R *.lfm}
{ Tbody }
procedure Tbody.FormActivate(Sender: TObject);
begin
XData.Qry_mieter.Close;
XData.Qry_mieter.Open;
XData.Qry_mieter.Edit;
end;
{ Tbody }
end.

Dankbar für Hinweise . . .
Cuci
 
Beiträge: 38
Registriert: 10. Dez 2015, 20:09
Wohnort: Wo es warm ist
OS, Lazarus, FPC: LinuxMint 17.2 - Win7 in VM | 
CPU-Target: 64 bit
Nach oben

Beitragvon Michl » 15. Jul 2016, 22:12 Re: MySQL - Access Violation

Bei welcher Zeile genau kommt die Access Violation?
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2169
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon Cuci » 16. Jul 2016, 15:29 Re: MySQL - Access Violation

Hallo Michl,
das ist eine gute Frage. Ich dachte halt eben, das müssten die Datenbankbefehle sein - aaaaber - ich habe versucht, die Zeile zu ermitteln, komme aber mit Haltepunkteinstellung usw. nicht klar. In Delphi ist das anders. So ist bei mir z.B. 'Start bis zum Cursor' grau, ich kann es nicht verwenden. Wenn ich auswähle 'Neuer Haltepunkt' - Quelltexthaltepunkt, dann übergeht er diesen und kompiliert fertig bis zu der Fehlermeldung.
Vielleicht kannst Du mir sagen, was ich falsch mache . . .
Cuci
 
Beiträge: 38
Registriert: 10. Dez 2015, 20:09
Wohnort: Wo es warm ist
OS, Lazarus, FPC: LinuxMint 17.2 - Win7 in VM | 
CPU-Target: 64 bit
Nach oben

Beitragvon af0815 » 16. Jul 2016, 15:50 Re: MySQL - Access Violation

Vielleicht zuerst kompilieren und DANN erst starten.
Menü Start -> Erstellen DANN erst Menü Start -> Start

Vor allen, auch kontrollieren welche Fenster in welcher Reihenfolge erzeugt werden. Nicht das Datenbanksachen noch nicht erstellt wurden und vor dem Erzeugen aufgerufen werden.
Menü Projekt -> Projekteinstellungen -> Projekt Optionen -> Formulare (Forms)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3258
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon wp_xyz » 16. Jul 2016, 15:59 Re: MySQL - Access Violation

Cuci hat geschrieben:Hallo Michl,
komme aber mit Haltepunkteinstellung usw. nicht klar. In Delphi ist das anders. So ist bei mir z.B. 'Start bis zum Cursor' grau, ich kann es nicht verwenden. Wenn ich auswähle 'Neuer Haltepunkt' - Quelltexthaltepunkt, dann übergeht er diesen und kompiliert fertig bis zu der Fehlermeldung.
Vielleicht kannst Du mir sagen, was ich falsch mache . . .

'Start bis zum Cursor' funktioniert bei Lazaur nur innerhalb der aktiven Routine (ich glaube dazu gab es hier vor kurzem eine Diskussion).

Der Haltepunkt wird übergangen, wenn keine Debug-Informationen vorhanden sind ("Projekt-Einstellungen" > "Debuggen" > Häkchen vor "Debugger Informationen für GDB erzeugen"). Aber mache dich auf eine gewissen Umstellung bezüglich des Debuggens gefasst, wenn du von Delphi kommst, bist du sehr verwöhnt...
wp_xyz
 
Beiträge: 2251
Registriert: 8. Apr 2011, 08:01

Beitragvon Cuci » 16. Jul 2016, 21:22 Re: MySQL - Access Violation

Hallo Leute, ich weiß nicht, ob ich da weitermachen soll . . .

habe alle Eure Tipps gecheckt. Als erstes habe ich mal die 3 Zeilen mit den Datenbankbefehlen rausgenommen. Erfolg. Keine Fehlermeldung mehr, aber auch keine Daten im Fbl.

Was mich zum Überlegen zwang, war die Anmerkung von af0815 wegen der Reihenfolge der Forms. Also habe ich die Form 'fdata' eliminiert und die Datenkomponenten auf die Form 'mieter' gesetzt.

Whooooow - ich kriege nach dem Kompilieren keine Fehlermeldung und die Daten stehen in den Feldern . . .

Sch.............e - wenn ich auf einen anderen Datensatz klicke macht sich die Anwendung wech ???????

Ist Lazarus so ein Sensibelchen? Muss ich jetzt Windoof bis in alle Ewigkeiten vorhalten oder eine gescheitere IDE mir C++ oder Java nehmen?

Verzweifelt klammere ich mich an dem Glas mit dem provenzalischen Rouge fest . . .
Cuci
 
Beiträge: 38
Registriert: 10. Dez 2015, 20:09
Wohnort: Wo es warm ist
OS, Lazarus, FPC: LinuxMint 17.2 - Win7 in VM | 
CPU-Target: 64 bit
Nach oben

Beitragvon Michl » 16. Jul 2016, 21:43 Re: MySQL - Access Violation

:) Nicht gleich die Flinte ins Korn werfen!

Ich habe hier mehrere Anwendungen mit Datenbankanbindung am laufen, funktioniert alles bestens! Zumeist nutze ich ZEOS, allerdings tun auch die per Lazarus mitgelieferten SQLDB Komponenten ihren Dienst.

Bei einer GUI kann man ein DataModul nutzen und dort alle Datenbankkomponenten drauf werfen (würde ich dann dynamisch erstellen, beim OnCreate des ersten Formulars). Ich selber nutze aber lieber eine eigene Unit, erstelle dort die Verbingung zur Datenbank und verbinde alle Controls dynamisch zur Laufzeit. Das hat den Vorteil, dass Zugriffsprobleme sofort behoben werden können.

Am besten du schaust dir mal ein Tutorial z.B. http://wiki.freepascal.org/SQLdb_Tutorial1 an, wie das empfohlene Vorgehen bei Lazarus/FreePascal ist.

Bei Fragen bitte fragen. Leider kann ich dir keine besseren Tipps geben, da ich nicht weiß, was du hier machst:
Cuci hat geschrieben:wenn ich auf einen anderen Datensatz klicke macht sich die Anwendung wech
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2169
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon af0815 » 16. Jul 2016, 22:16 Re: MySQL - Access Violation

Keep Cool :-)

Schalte mal im Menü->Projekteinstellungen die Checks ein. Siehe Bild und dann komplett neu kompilieren Menü->Run->Cleanup and Build
LazarusDebug.JPG


Mit diesen Einstellungen ist zwar die Ausführung etwas zäher, dafür sieht man eher wo es Probleme gibt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3258
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon wp_xyz » 17. Jul 2016, 12:08 Re: MySQL - Access Violation

Cuci hat geschrieben:Was mich zum Überlegen zwang, war die Anmerkung von af0815 wegen der Reihenfolge der Forms. Also habe ich die Form 'fdata' eliminiert und die Datenkomponenten auf die Form 'mieter' gesetzt.

Whooooow - ich kriege nach dem Kompilieren keine Fehlermeldung und die Daten stehen in den Feldern . . .

Wenn du Formulare im Designer erzeugst und sonst nichts weiteres machst, werden sie zur Laufzeit automatisch erzeugt. Unter "Projekt-Einstellungen" / "Formulare" siehtst du diese Formulare in der Liste "automatisch erzeugte Formulare". Die Liste wird beim Programmstart von oben nach unten abgearbeitet. Das heißt, wenn z.B. das 1.Formular erzeugt wird, existieren die anderen noch gar nicht. Daraus folgt für deinen Code, dass zu diesem Zeitpunkt kein Formular auf Eigenschaften, Objekte etc zugreifen kann, die auf später erzeugten Formularen stehen. Es sei denn, du weißt genau, dass diese Sachen erst benötigt werden, wenn diese Formulare dann geladen sind. Aber darauf solltest du dich nicht verlassen, denn allzuschnell denkt man an solche Einschränkungen nicht mehr. Eine Sonderrolle hat das 1.Formular. Es ist das Hauptformular und wird beim Programmstart automatisch angezeigt.

Was hat das mit deinem Problem zu tun? Wenn du Datenbank-Komponenten, die von anderen Formularen mitbenutzt werden sollen, auf ein "Sammel"-Formular klickst, hast du das Problem, dass dieses "Sammel-Formular" als erstes erzeugt werden sollte. Damit wird es aber zum Hauptformular, auch wen du diese Rolle einem anderen Formular zugedacht hast. Um dieser Zwickmühle aus dem Weg zu gehen, hat man sich die Datenmodule (TDataModule) ausgedacht - das sind unsichtbare "Formulare", die nur nicht-visuelle Komponenten aufnehmen können und problemlos vor dem Hauptformular erzeugt werden können. Daher solltest du Datenbank-Komponenten, die von mehreren Formularen mitbenutzt werden, auf ein TDataModule setzten und dieses in den Projektoptionen an die oberste Stelle verschieben.
wp_xyz
 
Beiträge: 2251
Registriert: 8. Apr 2011, 08:01

Beitragvon Cuci » 17. Jul 2016, 15:55 Re: MySQL - Access Violation

Zunächst vielen Dank für Eure Hilfe und Aufmunterung . . ist doch schwieriger als ich dachte.

Zunächst wollte ich mal die Ratschläge von af0815 befolgen und habe die Einstellungen im Debugger entsprechend geändert. Dann habe ich den CleanUp angestoßen. Die Dateien mit *.o und *.ppu ließen sich aber nicht löschen. Verzeichnis: /usr/share/lazarus/1.6RC1/components/codetools/units/x86_64-linux . . . Wenn diese gelöscht werden sollen kann ich das auch von Hand machen.

Den Ratschlag von wp_xyz möchte ich auch nachgehen. Frage: Wo finde ich das TData-Module ?

Außerdem soll es einen DatenDesktop geben. Den habe ich auch noch nicht gefunden.

Ihr werdet schon dafür sorgen, dass es mir nicht langweilig wird.
Cuci
 
Beiträge: 38
Registriert: 10. Dez 2015, 20:09
Wohnort: Wo es warm ist
OS, Lazarus, FPC: LinuxMint 17.2 - Win7 in VM | 
CPU-Target: 64 bit
Nach oben

Beitragvon wp_xyz » 17. Jul 2016, 16:38 Re: MySQL - Access Violation

Das Datenmodul findest du in der Komponenten-Palette, Lasche "Data Access", ähnlich wie bei Delphi.

Du hast deinen Lazarus ins share Verzeichnis installiert, da hast du als normaler User keine Schreibrechte, d.h. das "Clean & Build" scheitert wahrscheinlich daran, weil diese Aktion auch die zu Lazarus gehörenden Units betrifft. Es wäre günstiger Lazarus im Home-Verzeichnis zu haben, dann hast du alle Rechte, die du brauchst.

Es ist mein Eindruck, dass du von Windows kommst und auf Linux noch nicht so viel Erfahrung hast (soll kein Vorwurf o.ä. sein). Gleichzeitig stellst du dein Programm in dieser fremden Umgebung auf Lazarus um. Das ist hart... Ich fände, es wäre für dich weniger frustrierend, wenn du die Umstellung deines Programm auf Lazarus zuerst auf Windows machst, bis du eine lauffähige Version hast, und dann erst auf Linux wechselst.

[EDIT]
Blödsinn! An der Stelle, die ich eben dem DataModule zugewiesen habe, befindet sich TDataSource - sorry. Ein neues Datenmodul erzeugt man über "Datei" / "Neu".
Zuletzt geändert von wp_xyz am 18. Jul 2016, 21:17, insgesamt 1-mal geändert.
wp_xyz
 
Beiträge: 2251
Registriert: 8. Apr 2011, 08:01

Beitragvon af0815 » 17. Jul 2016, 18:23 Re: MySQL - Access Violation

Nachdem jetzt einiges geklärt ist :-) die Frage, wie hast du Lazarus installiert ?

Es ist gerade ein günstiger Zeitpunkt, da ich Lazarus auf einer VM in Linux Mint Cinnamon 64 installieren will. Nicht das ich Probleme damit hätte, sondern eher, wenn ich dieselben Schritte wie du machst, kann ich leichter nachvollziehen wo es bei deiner Installation zu Problemen kommt.

Ok, ich warte mal mit der Installation. Mein Linux Mint ist bis auf die Updates komplett neu.

Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3258
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: Win7/Linux (L stable FPC stable) per fpcup | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Cuci » 18. Jul 2016, 14:38 Re: MySQL - Access Violation

Um die Diskussion fortzuführen . . .

af0815: Ich habe Lazarus im November 2015 installiert und zwar aus der Anwendungsverwaltung. Da fehlten aber einige Zusätze, die ich mir von außen holte.
Bezüglich Aufräumen und Kompilieren: Ich habe mehr Rechte für Lazarus gesetzt und die Dateien wurden gelöscht. Wenn Du Lazarus installierst, solltest Du es, wie vorgeschlagen, im Home installieren.
wp_xyz: Natürlich habe ich mein Ferienhaus-Vermietungs-Proggy ( für www.belezy.eu) noch in einer VM unter Win 7 laufen (und auf 2 Laptops), denn ich brauche es ja täglich und ohne wäre das Chaos perfekt.

Für mich sind noch 3 Punkte offen:
TDataModules habe ich nicht gefunden
Den Daten-Desktop auch nicht
Und das Wichtigste: Das Proggy stürzt immer noch ab, wenn ich im Grid eine Veränderung vornehmen will. Solange das nicht gelöst ist brauche ich garnicht erst weiter zu machen. ich vermute,
dass irgend etwas irgendwohin geschrieben werden soll, wo keine Schreibrechte vorhanden sind
Cuci
 
Beiträge: 38
Registriert: 10. Dez 2015, 20:09
Wohnort: Wo es warm ist
OS, Lazarus, FPC: LinuxMint 17.2 - Win7 in VM | 
CPU-Target: 64 bit
Nach oben

Beitragvon creed steiger » 18. Jul 2016, 19:21 Re: MySQL - Access Violation

Starte mal aus dem Terminal ... da siehst du mehr
creed steiger
 
Beiträge: 935
Registriert: 11. Sep 2006, 21:56

Beitragvon Euklid » 18. Jul 2016, 19:25 Re: MySQL - Access Violation

Cuci hat geschrieben: Und das Wichtigste: Das Proggy stürzt immer noch ab, wenn ich im Grid eine Veränderung vornehmen will. Solange das nicht gelöst ist brauche ich garnicht erst weiter zu machen.


Ich verwende zum Finden von Acess Violations immer die heaptrc-Unit. Die kannst Du im vom af geposteten Fenster irgendwo unter Debuggen ankreuzen. Dann musst Du das Programm von der Konsole aus ausführen. Nach Beendigung zeigt er dann die aufgerufenen Funktionen samt Zeilennr. und führt Dich so zur Ursache. Ist allerdings etwas Erfahren oder, falls nicht vorhanden, dann zumindest Gedult von Nöten, bis man da durchsteigt ;)

Beste Grüße, Euklid
Euklid
 
Beiträge: 2755
Registriert: 22. Sep 2006, 09:38
Wohnort: Hessen

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Programme



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried