MySQL - Access Violation

Vorstellungen von Programmen, welche mit Lazarus erstellt wurden.
Cuci
Beiträge: 52
Registriert: Do 10. Dez 2015, 20:09
OS, Lazarus, FPC: LinuxMint 18.3 Cinnamon - Win7 in VM - Lazarus 1.8.0 fpc 3.0.4
CPU-Target: 64 bit
Wohnort: Wo es warm ist

MySQL - Access Violation

Beitrag von Cuci »

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 . . .

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: MySQL - Access Violation

Beitrag von Michl »

Bei welcher Zeile genau kommt die Access Violation?

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Cuci
Beiträge: 52
Registriert: Do 10. Dez 2015, 20:09
OS, Lazarus, FPC: LinuxMint 18.3 Cinnamon - Win7 in VM - Lazarus 1.8.0 fpc 3.0.4
CPU-Target: 64 bit
Wohnort: Wo es warm ist

Re: MySQL - Access Violation

Beitrag von Cuci »

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 . . .

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MySQL - Access Violation

Beitrag von af0815 »

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).

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MySQL - Access Violation

Beitrag von wp_xyz »

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...

Cuci
Beiträge: 52
Registriert: Do 10. Dez 2015, 20:09
OS, Lazarus, FPC: LinuxMint 18.3 Cinnamon - Win7 in VM - Lazarus 1.8.0 fpc 3.0.4
CPU-Target: 64 bit
Wohnort: Wo es warm ist

Re: MySQL - Access Violation

Beitrag von Cuci »

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 . . .

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: MySQL - Access Violation

Beitrag von Michl »

:) 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; 

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MySQL - Access Violation

Beitrag von af0815 »

Keep Cool :-)

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


Mit diesen Einstellungen ist zwar die Ausführung etwas zäher, dafür sieht man eher wo es Probleme gibt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MySQL - Access Violation

Beitrag von wp_xyz »

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.

Cuci
Beiträge: 52
Registriert: Do 10. Dez 2015, 20:09
OS, Lazarus, FPC: LinuxMint 18.3 Cinnamon - Win7 in VM - Lazarus 1.8.0 fpc 3.0.4
CPU-Target: 64 bit
Wohnort: Wo es warm ist

Re: MySQL - Access Violation

Beitrag von Cuci »

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.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: MySQL - Access Violation

Beitrag von wp_xyz »

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 Mo 18. Jul 2016, 22:17, insgesamt 1-mal geändert.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: MySQL - Access Violation

Beitrag von af0815 »

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).

Cuci
Beiträge: 52
Registriert: Do 10. Dez 2015, 20:09
OS, Lazarus, FPC: LinuxMint 18.3 Cinnamon - Win7 in VM - Lazarus 1.8.0 fpc 3.0.4
CPU-Target: 64 bit
Wohnort: Wo es warm ist

Re: MySQL - Access Violation

Beitrag von Cuci »

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

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: MySQL - Access Violation

Beitrag von creed steiger »

Starte mal aus dem Terminal ... da siehst du mehr

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: MySQL - Access Violation

Beitrag von Euklid »

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

Antworten