datenbankanbindung ohne komponente, fehlerfunktion
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
datenbankanbindung ohne komponente, fehlerfunktion
hallo,
ich wollte mich kurz vorstellen.
ich bn ein vb6 hobby-programmierer und will mich mit pascal bzw. lazarus auseinandersetzen.
dieses ganze projekt (lazarus + fpc) hat mich beeindruckt.
ich habe mich nicht wirklich mit pascal auseinandergestzt, weil die programmiersprache basic (office, diverse anwendungen) stark verbreitet ist.
jetzt ist der zeitpunkt gekommen mich damit auseinderzusetzen, weil fpc plattformübergreifend und nicht abhängig von diversen laufzeitumgebungen (net u.d.) ist.
natürlich habe ich auch so meine anfangsschwierigkeiten pascal zu verstehen.
deshalb habe ich einige frage und bin dankbar, wenn sie beantwortet werden.
ich habe ein projekt (rechnungsprogramm) was ich nach pascal konvertieren möchte.
dieses programm basiert auf vb6 und hat eine msaccess datenbank.
ich habe das vb programm so aufgebaut, das mit einem modul (main) das programm gestartet wird.
in diesem modul werden alle einstellungen aus einer ini-datei ausgelesen.
es wird in diesem modul auch eine datenbankverbindung hergestellt hergestellt.
danach wird ein login-formular geöffnet. der benutzer und sein passwort ist in der db gespeichert.
die fehler in den routinen werden an eine funktion weitergeleitet und dort ausgewertet.
1. gibt es eine möglichkeit in pascal auch eine sub main zu erstellen und eine datenbankverbindung ohne komponenten herzustellen?
die formulare sollten erst dann geladen werden, wenn alles ok ist.
2. gibt es eine möglichkeit so eine fehlerfunktion (on error goto fehler -> funktion mit rückgabewert) in pascal zu implementieren?
ich bedanke mich im voraus für die hilfestellung und wünsche allen ein frohes weihnachtsfest.
gruss
ich wollte mich kurz vorstellen.
ich bn ein vb6 hobby-programmierer und will mich mit pascal bzw. lazarus auseinandersetzen.
dieses ganze projekt (lazarus + fpc) hat mich beeindruckt.
ich habe mich nicht wirklich mit pascal auseinandergestzt, weil die programmiersprache basic (office, diverse anwendungen) stark verbreitet ist.
jetzt ist der zeitpunkt gekommen mich damit auseinderzusetzen, weil fpc plattformübergreifend und nicht abhängig von diversen laufzeitumgebungen (net u.d.) ist.
natürlich habe ich auch so meine anfangsschwierigkeiten pascal zu verstehen.
deshalb habe ich einige frage und bin dankbar, wenn sie beantwortet werden.
ich habe ein projekt (rechnungsprogramm) was ich nach pascal konvertieren möchte.
dieses programm basiert auf vb6 und hat eine msaccess datenbank.
ich habe das vb programm so aufgebaut, das mit einem modul (main) das programm gestartet wird.
in diesem modul werden alle einstellungen aus einer ini-datei ausgelesen.
es wird in diesem modul auch eine datenbankverbindung hergestellt hergestellt.
danach wird ein login-formular geöffnet. der benutzer und sein passwort ist in der db gespeichert.
die fehler in den routinen werden an eine funktion weitergeleitet und dort ausgewertet.
1. gibt es eine möglichkeit in pascal auch eine sub main zu erstellen und eine datenbankverbindung ohne komponenten herzustellen?
die formulare sollten erst dann geladen werden, wenn alles ok ist.
2. gibt es eine möglichkeit so eine fehlerfunktion (on error goto fehler -> funktion mit rückgabewert) in pascal zu implementieren?
ich bedanke mich im voraus für die hilfestellung und wünsche allen ein frohes weihnachtsfest.
gruss
- af0815
- Lazarusforum e. V.
- Beiträge: 6777
- 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: datenbankanbindung ohne komponente, fehlerfunktion
Erstmal willkommen bei Lazarus.VB_Lazarus hat geschrieben: 1. gibt es eine möglichkeit in pascal auch eine sub main zu erstellen und eine datenbankverbindung ohne komponenten herzustellen?
die formulare sollten erst dann geladen werden, wenn alles ok ist.
2. gibt es eine möglichkeit so eine fehlerfunktion (on error goto fehler -> funktion mit rückgabewert) in pascal zu implementieren?
1) Ja, das Projekt startet und ruft dann die Erstellung der einzelnen Formulare auf und übergibt die Kontrolle an das definierte Hauptformular. Das entspricht in etwa dem Verhalten was du meinst. Bezüglich Datenbankverbindung - die Datenbankverbindung sind nichtvisuelle Komponenten, damit können die, wie alle anderen Objekte auch, per Programmcode erstellt und verwendet werden. Ich nehme an, du meinst das die Verbindung ohne visuell sichtbare Komponenten durchgeführt wir für das Login.
2) Ja, halte ausschau nach try/except oder try/finally
Auf dem Portal ist ein Link für dieLazSnippets/LazInfos vielleicht bekommst du dort ein paar Anregungen.
Bezüglich Access, stellt sich die Frage, ob es verwendet werden soll. Es ist auf Windows beschränkt und meines Wissens nur über ODBC (kein ADO oder RDO) anzusprechen. vor allen wenn du die Applikation auf Lazarus umstellen willst (ev. Plattformunabhängig) so wäre es doch gut, die alten Wege zu verlassen und optimiert für Lazarus mit seinen Möglichkeiten zu arbeiten. Auch die Version 1.0 von Lazarus kommt langsam in Sicht

Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: datenbankanbindung ohne komponente, fehlerfunktion
danke, für die schnelle antwort.
ich habe gemerkt, dass die formulare in der .lpi aufgerufen werden.
ist das richtig, das ich meine procedure auch in der .lpi definieren muss und entsprechend abarbeiten?
kann ich mit dieser try funktion auch eine resume next erzeugen?
mit der datenbank verhält es sich so, ich habe msaccess und kann die datenbank dadurch sehr komfortabel ändern und anpassen.
ich würde auch gerne von diesem datenbankformat abkommen, wenn ich eine einfache alternative hätte.
non visuelle komponente, kann ich die komponenten im code ansprechen?
muss die definition irgendwo in der uses stehen?
ich habe gemerkt, dass die formulare in der .lpi aufgerufen werden.
ist das richtig, das ich meine procedure auch in der .lpi definieren muss und entsprechend abarbeiten?
kann ich mit dieser try funktion auch eine resume next erzeugen?
mit der datenbank verhält es sich so, ich habe msaccess und kann die datenbank dadurch sehr komfortabel ändern und anpassen.
ich würde auch gerne von diesem datenbankformat abkommen, wenn ich eine einfache alternative hätte.
non visuelle komponente, kann ich die komponenten im code ansprechen?
muss die definition irgendwo in der uses stehen?
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: datenbankanbindung ohne komponente, fehlerfunktion
Hallo.
Wenn du eine GUI anwendung hast (visuelle komponente, also form) dann lass ich die .lpr datei meistens komplett in Ruhe.
viel mehr ändert man die eigentliche .pas datei.
Es kommt drauf an was für eine Procedure das ist. Je nachdem , ob das eine Procedur einer Klasse ist oder einfach nur eine dahingestellte Procedure ist muss man die Deklarieren, ein paar beispiele (gekürzt):
1. Button1.Click
2. Globale funktion
wobei man die deklaration auch im 2ten fall vornehmen sollte weil man sonnst die proceduren sotieren muss.
Also wenn beim Button1Click procedure a von procedure b aufgerufen wird müsste die Reihenfolge erst a, dann b, dann Button1.Click sein.
Wenn man die vorher deklariert kannst du die umstellen wie du willst
Soweit ich weis verhält sich
try
//...
except
//...
end;
so das beim Fehler innerhalb vom try-teil direkt zum except gesprungen wird und dieser ausgeführt wird. sonnst wird nur der tryteil durchgelaufen.
try
//...
finally
//...
end;
da sollte wie oben try ausgeführt weden und beim fehler zum finally springen. Aber im unterschied würde das finally auch ohne fehler normalerweise durchgelaufen
Datenbankformat kenn ich mich nicht aus. Muss es gleich datenbank sein, oder reicht nicht textdatei?
Wenn du eine GUI anwendung hast (visuelle komponente, also form) dann lass ich die .lpr datei meistens komplett in Ruhe.
viel mehr ändert man die eigentliche .pas datei.
Es kommt drauf an was für eine Procedure das ist. Je nachdem , ob das eine Procedur einer Klasse ist oder einfach nur eine dahingestellte Procedure ist muss man die Deklarieren, ein paar beispiele (gekürzt):
1. Button1.Click
Code: Alles auswählen
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject); // Deklaration , muss sein.
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
Code: Alles auswählen
TForm1 = class(TForm)
Button1: TButton;
private
public
end;
function EurozuDollar(euro:real):real; // Deklaration ist "Freiwillig"
var
Form1: TForm1;
implementation
{$R *.lfm}
function EurozuDollar(euro:real):real;
begin
result := euro * 1.38;
end;
Also wenn beim Button1Click procedure a von procedure b aufgerufen wird müsste die Reihenfolge erst a, dann b, dann Button1.Click sein.
Wenn man die vorher deklariert kannst du die umstellen wie du willst

Soweit ich weis verhält sich
try
//...
except
//...
end;
so das beim Fehler innerhalb vom try-teil direkt zum except gesprungen wird und dieser ausgeführt wird. sonnst wird nur der tryteil durchgelaufen.
try
//...
finally
//...
end;
da sollte wie oben try ausgeführt weden und beim fehler zum finally springen. Aber im unterschied würde das finally auch ohne fehler normalerweise durchgelaufen
Datenbankformat kenn ich mich nicht aus. Muss es gleich datenbank sein, oder reicht nicht textdatei?
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 99
- Registriert: Do 23. Dez 2010, 19:10
- OS, Lazarus, FPC: Windows 10/11 32/64bit, L 3.2.0 32/64bit, FPC 3.2.2 32/64bit
Re: datenbankanbindung ohne komponente, fehlerfunktion
erst mal danke für die beispiele.
das problem liegt nicht in der prozedur, sondern kann ich eine prozedur vor dem erstellen (create) einer form ausführen?
d.h. ich möchte einige einstellungen für das programm abfragen, unter anderem ein dialog für die auswahl der datenbank.
falls einige einstellungen fehl laufen, sollte die form erst gar nicht angezeigt werden und das programm sollte mit einer info beendet werden.
datenbank ist leider notwendig, da es verschiedene abhängigkeiten gibt (adressen, rechnungen, artikel usw.).
diese daten kann man am besten mittels einer db handeln.
leider habe ich nur ein tutorial über die anbindung einer msaccess db mittels einer komponente gefunden.
in vb kann man im projekt einen verweis setzen und dann auf das objekt zugreifen.
ich wollte die db vorher verbinden, bevor ich eine form erstelle.
das problem liegt nicht in der prozedur, sondern kann ich eine prozedur vor dem erstellen (create) einer form ausführen?
d.h. ich möchte einige einstellungen für das programm abfragen, unter anderem ein dialog für die auswahl der datenbank.
falls einige einstellungen fehl laufen, sollte die form erst gar nicht angezeigt werden und das programm sollte mit einer info beendet werden.
datenbank ist leider notwendig, da es verschiedene abhängigkeiten gibt (adressen, rechnungen, artikel usw.).
diese daten kann man am besten mittels einer db handeln.
leider habe ich nur ein tutorial über die anbindung einer msaccess db mittels einer komponente gefunden.
in vb kann man im projekt einen verweis setzen und dann auf das objekt zugreifen.
ich wollte die db vorher verbinden, bevor ich eine form erstelle.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: datenbankanbindung ohne komponente, fehlerfunktion
Du kannst die Datenbank-Komponenten auf ein Datanmodul legen. Diese werden wie Formulare erstellt, und haben auch einen OnCreate-Event. Wenn du also dieses Datenmodul als erstes erstellst (im Menü »Projekt -> Projekteinstellungen -> Formulare« nach ganz oben sortieren), kannst du im OnCreate-Event ein weiteres Formular manuell erstellen und anzeigen. Wenn etwas schief läuft, kannst du mit Application.Terminate; das Programm fast sofort beenden (alle automatisch erstellten Formulare werden trotzdem noch erstellt, aber nie angezeigt).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: datenbankanbindung ohne komponente, fehlerfunktion
Ich würde das "Stylish" machen und einfach ein Ladebild zwischenstellen, das hat jedes Programm, sogar Lazarus selbst xD
Dann startest du eine Form auf der nen Tolles Bild liegt. Borderstyle ist bsnone. und da kommt dan ein Timer drauf. Denn Timer sind gut für Code, der nach dem starten dieser Form ausgeführt wird. Beim OnCreate von Form1 z.B: gib es noch gar kein Button1, weil dieser erst danach ausgeführt wird. Also hast du dein Timer mit interval 1. Und in dem wird dann alles wichtige abgefragt. von mir aus schonmal mit der datenbank verbunden. Und wenn das klappt dann tust du am ende
timer1.Enabled := False // damit der nur einmal startet.
Form2.Enabled := False;
Form1.Enabled := True;
Oder eben statt Form1.Enabled : Achtung Feher... Bla Bla Bla
Ich gehe jetzt davon aus das Form1 deine tolle standartform ist und form2 die mit dem Bild.
Dann
>> Projekt >> Quelltext anzeigen >>
in das hier
vertauschen
dann wird erst Form2 gestartet. Sollte zumindest 
Dann startest du eine Form auf der nen Tolles Bild liegt. Borderstyle ist bsnone. und da kommt dan ein Timer drauf. Denn Timer sind gut für Code, der nach dem starten dieser Form ausgeführt wird. Beim OnCreate von Form1 z.B: gib es noch gar kein Button1, weil dieser erst danach ausgeführt wird. Also hast du dein Timer mit interval 1. Und in dem wird dann alles wichtige abgefragt. von mir aus schonmal mit der datenbank verbunden. Und wenn das klappt dann tust du am ende
timer1.Enabled := False // damit der nur einmal startet.
Form2.Enabled := False;
Form1.Enabled := True;
Oder eben statt Form1.Enabled : Achtung Feher... Bla Bla Bla
Ich gehe jetzt davon aus das Form1 deine tolle standartform ist und form2 die mit dem Bild.
Dann
>> Projekt >> Quelltext anzeigen >>
in das hier
Code: Alles auswählen
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Code: Alles auswählen
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

Code: Alles auswählen
Signatur := nil;