Allgemeiner Codecheck
Allgemeiner Codecheck
Hallo Leute,
1. kann mir bitte jemand den Code cheken ob der so in Ordnung ist? Es funktioniert zwar, aber ist das so korrekt? Die Funktion: Wenn ich von der Hauptform (FMain) in eine Unterform springe, und dort entweder abbreche ode OK klicke, soll das Programm wieder in die Hauptform springen und diese aktivieren. (Im Moment habe ich hier noch nichts programmiert)
Einige Fragen:
2. Kann man Buttons (oder anderes) in ein Array stellen um diese Buttons später mit einer For..Next-Schleife abarbeiten zu können? Und wie?
3. Wie gestalte ich Klassen (Module), um zB. Unterroutinen hier unterzubringen, die von überall angesprochen werden können?
4. für später: Wie gestalte ich einen Datenbankaufruf an eine MySQL/Maria-DB?
[50] cDBVerbindung.Close()
[51] cDBVerbindung.Type = "?????????????" ' Der Typ muss klein geschrieben werden!
[52] cDBVerbindung.Host = Application.Path &/ "?????????" 'Home/franz/Gambas/Test3 ??
[53] cDBVerbindung.Name = "Liste" ' Das ist der Datenbank-Name, hier vielleicht "oms" (ist noch nicht endgültig festgelegt)
[54] cDBVerbindung.User = sUser 'User-Name
[55] cDBVerbindung.Password = sPwd 'User-Pwd(unverschlüsselt)
[56] cDBVerbindung.Port = iPort 'welchen Port nehme ich hier, die DB ist auf dem Rechner installiert.
Bitte um Hilfe
1. kann mir bitte jemand den Code cheken ob der so in Ordnung ist? Es funktioniert zwar, aber ist das so korrekt? Die Funktion: Wenn ich von der Hauptform (FMain) in eine Unterform springe, und dort entweder abbreche ode OK klicke, soll das Programm wieder in die Hauptform springen und diese aktivieren. (Im Moment habe ich hier noch nichts programmiert)
Einige Fragen:
2. Kann man Buttons (oder anderes) in ein Array stellen um diese Buttons später mit einer For..Next-Schleife abarbeiten zu können? Und wie?
3. Wie gestalte ich Klassen (Module), um zB. Unterroutinen hier unterzubringen, die von überall angesprochen werden können?
4. für später: Wie gestalte ich einen Datenbankaufruf an eine MySQL/Maria-DB?
[50] cDBVerbindung.Close()
[51] cDBVerbindung.Type = "?????????????" ' Der Typ muss klein geschrieben werden!
[52] cDBVerbindung.Host = Application.Path &/ "?????????" 'Home/franz/Gambas/Test3 ??
[53] cDBVerbindung.Name = "Liste" ' Das ist der Datenbank-Name, hier vielleicht "oms" (ist noch nicht endgültig festgelegt)
[54] cDBVerbindung.User = sUser 'User-Name
[55] cDBVerbindung.Password = sPwd 'User-Pwd(unverschlüsselt)
[56] cDBVerbindung.Port = iPort 'welchen Port nehme ich hier, die DB ist auf dem Rechner installiert.
Bitte um Hilfe
Re: Allgemeiner Codecheck
Hallo vb6oldie,
zu 1): Das sieht doch schon gut aus. Ich würde nur statt des Form_Activate() den Form_Open() Event bevorzugen.
zu 2 und 3: siehe anghängtes Projekt.
Das Programm listet dir die Controls der Form in einer For/Each-Schleife auf, springt dann in die Klasse "meineKlasse" und schriebt etwas in die Konsole. Kehrt dann mit einem Rückgabewert vom Typ String zurück und gibt diesen ebenfalls auf der Konsole aus.
zu 4 habe ich zu wenig Erfahrung mit DBs
gg
zu 1): Das sieht doch schon gut aus. Ich würde nur statt des Form_Activate() den Form_Open() Event bevorzugen.
zu 2 und 3: siehe anghängtes Projekt.
Das Programm listet dir die Controls der Form in einer For/Each-Schleife auf, springt dann in die Klasse "meineKlasse" und schriebt etwas in die Konsole. Kehrt dann mit einem Rückgabewert vom Typ String zurück und gibt diesen ebenfalls auf der Konsole aus.
zu 4 habe ich zu wenig Erfahrung mit DBs
gg
- Dateianhänge
-
- Auflisten_von_TextBoxen_usw-0.0.1.tar.gz
- (11.51 KiB) 470-mal heruntergeladen
Re: Allgemeiner Codecheck
Hallo gambi,
ich glaube da gab es wieder Mißverstände, ich wollte so was wie hier beschrieben haben: Ich will nicht alle Controls auf einmal bearbeiten, sondern einzelne Gruppen davon separat (unterschiedlich) bearbeiten können.
In VB6 gab es die Möglichkeit, Buttons etc. bereits bei der Erstellung als Mitglieder von Array's zu definieren mit einheitlichen Namen aber mit Indizes.
Die "Form_Activate()" habe ich inzwischen alle auf "Form_Open()" geändert.
Kann man versehentlich namentlich falsch definierte Forms nachträglich ändern oder löschen, das habe ich bisher noch nicht hinbekommen.
Bitte um weitere Hilfe
ich glaube da gab es wieder Mißverstände, ich wollte so was wie hier beschrieben haben: Ich will nicht alle Controls auf einmal bearbeiten, sondern einzelne Gruppen davon separat (unterschiedlich) bearbeiten können.
In VB6 gab es die Möglichkeit, Buttons etc. bereits bei der Erstellung als Mitglieder von Array's zu definieren mit einheitlichen Namen aber mit Indizes.
Die "Form_Activate()" habe ich inzwischen alle auf "Form_Open()" geändert.
Kann man versehentlich namentlich falsch definierte Forms nachträglich ändern oder löschen, das habe ich bisher noch nicht hinbekommen.
Bitte um weitere Hilfe
Re: Allgemeiner Codecheck
So läuft das bei mir (und Postgresql, wenn du die Wahl hast,würde ich das empfehlen):vb6oldie hat geschrieben: ↑Fr 5. Mai 2017, 08:324. für später: Wie gestalte ich einen Datenbankaufruf an eine MySQL/Maria-DB?
[50] cDBVerbindung.Close()
[51] cDBVerbindung.Type = "?????????????" ' Der Typ muss klein geschrieben werden!
[52] cDBVerbindung.Host = Application.Path &/ "?????????" 'Home/franz/Gambas/Test3 ??
[53] cDBVerbindung.Name = "Liste" ' Das ist der Datenbank-Name, hier vielleicht "oms" (ist noch nicht endgültig festgelegt)
[54] cDBVerbindung.User = sUser 'User-Name
[55] cDBVerbindung.Password = sPwd 'User-Pwd(unverschlüsselt)
[56] cDBVerbindung.Port = iPort 'welchen Port nehme ich hier, die DB ist auf dem Rechner installiert.
gambas code
Dim DB as Connection Dim qry as String Dim res as Result DB.Type = "postgresql" 'alternativ mysql DB.Host = "derhostname" ' auch ip oder "localhost" DB.Name = "namederdatenbank" DB.Login = "benutzer" DB.Password = "password" qry = "select count(*) as anzahl from tbkunden;" res = DB.Exec(qry) Debug res!anzahlIch selbst definiere die Connection einmalig in einem Modul als Property, dadurch wird sie zu einem Singleton (oder einer globalen Variable). Beim ersten Zugriff auf die DB wird die Connection aufgebaut, danach bleibt sie zur Laufzeit des Programmes bestehen. Das läuft so:
gambas code
Property Read DegShop As Connection Private $Degshop As New Connection Private Function Degshop_Read() As DegConnection If Not $Degshop.Opened Then 'Debug "Open connection to db Shopdb" $Degshop.Type = "postgresql" $Degshop.Host = "hostname" $Degshop.Login = "user" $Degshop.Password = "passwoooord" Open($Degshop) Endif Return $Degshop Catch Error.Propagate End
Alles Gute,
tionov
tionov
Re: Allgemeiner Codecheck
Hallo,
gg
Ja, selbstverständlich. Im Projektexplorer mit rechter Maustaste auf die Form, deren Namen du ändern oder die du löschen möchtest, klicken und im Kontextmenu "Umbenennen" oder "Löschen" wählen. Umbenennen mit der Return-Taste bestätigen!
gg
-
- Foriker
- Beiträge: 189
- Registriert: Di 4. Nov 2014, 21:11
- Kontaktdaten:
Re: Allgemeiner Codecheck
Meinst du das.Kann man versehentlich namentlich falsch definierte Forms nachträglich ändern oder löschen, das habe ich bisher noch nicht hinbekommen.
1.
Rechtsklick auf die Form und Kontext auswählen. Bei Auswahl Umbenennen, muss dann im Code der Name auch umgestellt werden geht nicht automatisch. Das gleiche gilt für Löschen. Falls noch ein Menüeintrag oder Button für die gelöschte Formname.show existiert. Unter Umständen kann sich das Programm aufhängen.
2.
Mit Rechtsklick auf die grüne Form kannste mit Kontext Menüeditor die Namen für Menü1, Menü2, usw. auch ändern. Im Code muss dann das auch angepasst werden.
3.
Ändern des Namens für ein Element(Button1, Label1, usw.) mit Linksklick auf der Form auswählen und bei Eigenschaften kann dann der Name geändert werden. Die Änderungen im Code geht automatisch. Wird das ausgewählte Element gelöscht(per Kontexmenü oder Taste Entf bei einigen Tastaturen auch Del) werden die Funktion im Code automatisch nicht mit gelöscht.
.
Zuletzt geändert von besenmuckel am Sa 6. Mai 2017, 18:26, insgesamt 8-mal geändert.
Re: Allgemeiner Codecheck
Hallo,
Du hast ja aber die Auflistung aller Controls in deiner Form.
In dem angehängten Beispiel werden die Controls durchlaufen und in Anhängigkeit ihres Namens - in dem Fall TextBoxen - entsprechend positioniert (siehe Klasse posTBs.class).
Du könntest aber auch über die Tag-Eigenschaft gehen und den Controls dann entsprechende Tags mitgeben (z.b. TB1, TB2 usw.).
gg
nun, diese Möglichkeit kenne ich zumindest nicht in Gambas.gambi hat geschrieben: ↑Fr 5. Mai 2017, 20:49Ich will nicht alle Controls auf einmal bearbeiten, sondern einzelne Gruppen davon separat (unterschiedlich) bearbeiten können.
In VB6 gab es die Möglichkeit, Buttons etc. bereits bei der Erstellung als Mitglieder von Array's zu definieren mit einheitlichen Namen aber mit Indizes.
Du hast ja aber die Auflistung aller Controls in deiner Form.
In dem angehängten Beispiel werden die Controls durchlaufen und in Anhängigkeit ihres Namens - in dem Fall TextBoxen - entsprechend positioniert (siehe Klasse posTBs.class).
Du könntest aber auch über die Tag-Eigenschaft gehen und den Controls dann entsprechende Tags mitgeben (z.b. TB1, TB2 usw.).
gg
- Dateianhänge
-
- Auflisten_von_TextBoxen_usw_02-0.0.1.tar.gz
- (12.03 KiB) 461-mal heruntergeladen
Re: Allgemeiner Codecheck
Hallo 4tionov,
ich habe alles in ein Modul (DBRead.module) geschrieben, so wie du es angezeigt hast. Ich habe noch nichts weiter dazu programmiert.
Wenn ich das Programm starte erhalte ich sofort die Fehlermeldung in der ersten Zeile:
Das einmalige starten der Connection will ich auch beibehalten, und ev. am Schluss des Programms wieder closen.
Wenn es dann funktioniert, wie rufe ich die property auf?
Wo gebe ich eigentlich an, wie die Datenbank heißt? $DegShop.name = "oms01" wie im Buch beschrieben?
Bitte um Hilfe
PS.: Wenn ich etwas im Editor eingebe, muss ich manchmal auf den "Down"-Pfeil und die angezeigte funktion klicken, damit die Eingabezeile abgeschlossen wird. Kann man das irgendwo einstellen, damit man automatisch aus der Zeile herauskommt?
ich habe alles in ein Modul (DBRead.module) geschrieben, so wie du es angezeigt hast. Ich habe noch nichts weiter dazu programmiert.
Wenn ich das Programm starte erhalte ich sofort die Fehlermeldung in der ersten Zeile:
Ich habe auch anderes probiert z.B. die Anleitung aus dem Buch 17.7.5, nichts geht.Unbekannter Bezeichner: Connection in DBRead.module
Das einmalige starten der Connection will ich auch beibehalten, und ev. am Schluss des Programms wieder closen.
Wenn es dann funktioniert, wie rufe ich die property auf?
Wo gebe ich eigentlich an, wie die Datenbank heißt? $DegShop.name = "oms01" wie im Buch beschrieben?
Bitte um Hilfe
PS.: Wenn ich etwas im Editor eingebe, muss ich manchmal auf den "Down"-Pfeil und die angezeigte funktion klicken, damit die Eingabezeile abgeschlossen wird. Kann man das irgendwo einstellen, damit man automatisch aus der Zeile herauskommt?
Re: Allgemeiner Codecheck
Du musst dafür in deinem Projekt die Komponenten gb.db und gb.db.mysql einbinden. Vorher kennt dein Projekt keine Connection-Klasse.
"DegShop" ist übrigens ein Bezeichner für eine bestimmte DB in meinem Projekt. Bei mir heißt das Modul "DBs, der Name ist kurz, weil ich den oft verwende". Der Aufruf geht dann so:
gambas code
"DegShop" ist übrigens ein Bezeichner für eine bestimmte DB in meinem Projekt. Bei mir heißt das Modul "DBs, der Name ist kurz, weil ich den oft verwende". Der Aufruf geht dann so:
gambas code
Dim qry As String Dim res As Result 'Beispielquery qry = "select name from tbanyname;" res = Dbs.DegShop.Exec(qry) If res.Count > 0 Then For Each res Print res!name Next EndifDurch die Verwendung eines Modules und seiner Properties, ist das ein Singleton, die Connection steckt also in einer programmweit eindeutigen globalen Variablen. Auch wenn sonst bei Gambas fast immer von der Verwendung globaler Variablen abzuraten ist, hier hat sie starke Vorteile. Besonders wenn Du Transactions verwenden solltest, kann es sonst leicht zu DeadLocks kommen, wenn zwei Teile deines Programmes je eine eigene Connection aufmachen und auf den selben Tabellen der DB arbeiten.
Alles Gute,
tionov
tionov
Re: Allgemeiner Codecheck
Hallo 4tionov,
wieder mal eine blöde Frage: wie binde ich die beiden Komponenten ein?
Es war mir bewusst, dass "Degshop" eine deiner Komponenten ist, ich habe das ganze nur einfach kopiert, damit kein zusätzlicher Fehler auftritt.
Natürlich werde ich ausreichend Transactions verwenden um zusammengehörige Dinge auch zusammen verarbeiten zu können.
Wie funktioniert das Modul "Data"? und wie installiere ich es, wenn ich es benötigen sollte?
Eine weitere Frage: Ich habe in der Deklaration des Hauptfensters einige Public-Variablen angegeben, aber in andern Forms muss ich sie trotzdem Qualifizieren, ich dachte, das währen damit "Globale" Variablen?
Bitte um Hilfe
wieder mal eine blöde Frage: wie binde ich die beiden Komponenten ein?
Es war mir bewusst, dass "Degshop" eine deiner Komponenten ist, ich habe das ganze nur einfach kopiert, damit kein zusätzlicher Fehler auftritt.
Natürlich werde ich ausreichend Transactions verwenden um zusammengehörige Dinge auch zusammen verarbeiten zu können.
Wie funktioniert das Modul "Data"? und wie installiere ich es, wenn ich es benötigen sollte?
Eine weitere Frage: Ich habe in der Deklaration des Hauptfensters einige Public-Variablen angegeben, aber in andern Forms muss ich sie trotzdem Qualifizieren, ich dachte, das währen damit "Globale" Variablen?
Bitte um Hilfe
Re: Allgemeiner Codecheck
In Gambas3 Strg-P (= Projekt bearbeiten), da links Komponenten. Hier sind die Komponenten beschrieben:
http://gambaswiki.org/wiki/comp
Nein, das ist keine Komponente, sondern eine Property.Es war mir bewusst, dass "Degshop" eine deiner Komponenten ist, ich habe das ganze nur einfach kopiert, damit kein zusätzlicher Fehler auftritt.
Meinst du "DBs", was ich erwähnt habe? Sonst verstehe ich das nicht. Wenn ja, "DBs" heißt bei mir das Modul, in dem ich die Connection(s) definiert habe (Das ist bei Dir DBRead.module).Wie funktioniert das Modul "Data"? und wie installiere ich es, wenn ich es benötigen sollte?
Nein, Forms sind spezielle Klassen, die von Form erben. Eine Klasse ist aber nur eine Beschreibung eines Objektes, das erst "lebt", wenn es mit "new" instantiiert wurde. In einer Klasse kannst du nichts speichern, das geht erst in dem daraus erstellten Objekt. Dafür kannst du von einer Klasse beliebig viele Objekte erstellen. Selbst wenn das Objekt nun öffentlich beschreibbare Properties (oder auch Variablen) hat, die kannst du nur beschreiben oder lesen so lange das Objekt existiert.Eine weitere Frage: Ich habe in der Deklaration des Hauptfensters einige Public-Variablen angegeben, aber in andern Forms muss ich sie trotzdem Qualifizieren, ich dachte, das währen damit "Globale" Variablen?
Module hingegen sind Behälter für Methoden, die du aufrufen kannst, ohne, dass erst ein Objekt daraus erstellt werden muss. Sie sind einmalig und statisch. Darum funktionieren sie (Properties darin) als Globale Variablen. Aber Globale Variablen musst du generell vermeiden! Es gibt nur ganz seltene Ausnahmen. "DBRead.DegShop" ist eine davon.
Bitte schau noch mal das Beispiel an: viewtopic.php?f=3&t=5422#p12125
Alles Gute,
tionov
tionov
Re: Allgemeiner Codecheck
Hallo 4tionov,
ich habe nun die beiden Komponenten installiert.
Die Code habe ich inzwischen angepasst: und in FMain: Es tritt ein neuer Fehler auf:
Syntaxfehler in FMain.
Der Fehler tritt in der Exec-Zeile vor dem Select auf.
Ich habe aus der Wiki den Code übernommen, aus "How To Open a MySQL connection and use it", wie er im Exampel1 beschrieben wurde.
Der Fehler tritt auch auf, wenn ich nur "SELECT * FROM adr" eingebe.
In der Datenbank habe ich bis jetzt nur einen einzigen Satz hinterlegt, in der Tabelle "adr", die anderen 35 Tabellen sind bis jetzt leer.
* Bitte mir zu verzeihen, wenn ich statt Prozedur Komponente sage oder sonstige Teilbereiche des Codes falsch benenne.
* Globale variablen will ich dann benutzen, wenn sie überall mit dem gleichen Inhalt vorkommen und nur einmal belegt werden, z.B.:
fh = screen.Height
fh5 = fh / 4.2
fh6 = fh / 6.3
fw = screen.Width
fw2 = fw / 2.07
bh = 32
Diese kommen in (fast) allen Forms immer wieder vor.
* Das "Data" habe ich irgendwo gesehen und ich dachte, es hat etwas mit der Ausgabe von Daten aus der DB zu tun, aber das ist anscheinend so nicht richtig/nicht nötig.
Ich taste mich eben Schritt für Schritt vor um zu richtigen Ergebnissen zu kommen.
Liebe Grüße
ich habe nun die beiden Komponenten installiert.
Die Code habe ich inzwischen angepasst: und in FMain: Es tritt ein neuer Fehler auf:
Syntaxfehler in FMain.
Der Fehler tritt in der Exec-Zeile vor dem Select auf.
Ich habe aus der Wiki den Code übernommen, aus "How To Open a MySQL connection and use it", wie er im Exampel1 beschrieben wurde.
Der Fehler tritt auch auf, wenn ich nur "SELECT * FROM adr" eingebe.
In der Datenbank habe ich bis jetzt nur einen einzigen Satz hinterlegt, in der Tabelle "adr", die anderen 35 Tabellen sind bis jetzt leer.
* Bitte mir zu verzeihen, wenn ich statt Prozedur Komponente sage oder sonstige Teilbereiche des Codes falsch benenne.
* Globale variablen will ich dann benutzen, wenn sie überall mit dem gleichen Inhalt vorkommen und nur einmal belegt werden, z.B.:
fh = screen.Height
fh5 = fh / 4.2
fh6 = fh / 6.3
fw = screen.Width
fw2 = fw / 2.07
bh = 32
Diese kommen in (fast) allen Forms immer wieder vor.
* Das "Data" habe ich irgendwo gesehen und ich dachte, es hat etwas mit der Ausgabe von Daten aus der DB zu tun, aber das ist anscheinend so nicht richtig/nicht nötig.
Ich taste mich eben Schritt für Schritt vor um zu richtigen Ergebnissen zu kommen.
Liebe Grüße
Re: Allgemeiner Codecheck
Der Syntaxfehler: Es fehlt eine schließende Klammer bei Exec. Gambas sagt Dir doch die Zeilennummer beim Fehler, da kannst Du gleich schauen.
Alles Gute,
tionov
tionov
Re: Allgemeiner Codecheck
Insgesamt: Deine Prozedur Connect() ist nicht gut. Weil sie Public ist, kann sie in deinem Programm von verschiedenen Seiten vielfach aufgerufen werden. Schau mal an, was ich Dir zu Beginn gezeigt habe, mit der Property, auf die nur lesend zugegriffen werden kann, und die nur beim ersten Zugriff die Connection startet...
In posting.php?mode=reply&f=3&t=5418#pr12142 hattest du das schon richtig.
In posting.php?mode=reply&f=3&t=5418#pr12142 hattest du das schon richtig.
Alles Gute,
tionov
tionov
Re: Allgemeiner Codecheck
Hallo 4tionov,
den Fehler mit der Klammer hatte ich selber bald behoben.
Aber dann trat ein neuer Fehler im Modul auf.
Dann habe ich den ursprünglichen Code wiederhergestellt.
Dann habe ich versucht den "DegShop" (den ich ja nicht habe) durch "Con" zu ersetzen, das erste Problem, ich kann in der Funktion das "DegConnect" nicht durch "DegConnect" ersetzen, sondern ich verwende als Test nur "Connect".
Es erscheint der Fehler: "Unbekannter Bezeichner: Open" in der Open-Zeile.
Was habe ich nun schon wieder falsch gemacht? Liebe Grüße
den Fehler mit der Klammer hatte ich selber bald behoben.
Aber dann trat ein neuer Fehler im Modul auf.
Dann habe ich den ursprünglichen Code wiederhergestellt.
Dann habe ich versucht den "DegShop" (den ich ja nicht habe) durch "Con" zu ersetzen, das erste Problem, ich kann in der Funktion das "DegConnect" nicht durch "DegConnect" ersetzen, sondern ich verwende als Test nur "Connect".
Es erscheint der Fehler: "Unbekannter Bezeichner: Open" in der Open-Zeile.
Was habe ich nun schon wieder falsch gemacht? Liebe Grüße
Wer ist online?
Mitglieder in diesem Forum: Ahrefs [Bot], Google [Bot] und 2 Gäste