|
Antwort |
Registriert seit: 25. Apr 2006 197 Beiträge |
#11
Diese variante funktioniert auch soweit.
Bloß wenn das Frame bereits eingeladen ist, und es nochmal auswähle bekomm eich die meldung das es bereits existiert.. Machmal Bekomme ich auch die Fehlermeldung Abstrakter Fehler.... Hier mal der Quellcode für die Form
Delphi-Quellcode:
unit haupt;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, umysqlvio, uMysqlCT, uMysqlClient, uMysqlHelpers, StdCtrls, FMTBcd, DB, SqlExpr, ComCtrls, Menus, ku_gesamt, neu_kunde, ku_bearb, ku_suche; {$I mysqlinc.inc} type TForm1 = class(TForm) StatusBar2: TStatusBar; MainMenu1: TMainMenu; Optionen1: TMenuItem; Verbindungseinstellunegn1: TMenuItem; Kunden1: TMenuItem; KundeSuchen1: TMenuItem; KundeLschen1: TMenuItem; N2: TMenuItem; Hilfe1: TMenuItem; Verbindung1: TMenuItem; Verbindungsstatus1: TMenuItem; N1: TMenuItem; VerbindungTrennen1: TMenuItem; VerbindungHerstellen1: TMenuItem; AlleKundenanzeigen1: TMenuItem; Label1: TLabel; Kundehinzufgen2: TMenuItem; temp_var_type: TEdit; temp_var_value: TEdit; Kundendatenbearbeiten1: TMenuItem; procedure KundeSuchen1Click(Sender: TObject); procedure Kundendatenbearbeiten1Click(Sender: TObject); procedure Kundehinzufgen2Click(Sender: TObject); procedure AlleKundenanzeigen1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FMysql: TMysqlClient; FResult: TMysqlResult; FVisibleFrame: TFrame; procedure SetVisibleFrame(frame: TFrame); public property VisibleFrame: TFrame read FVisibleFrame write SetVisibleFrame; end; var Form1: TForm1; anz_frame: TFrame; cou_res: integer; implementation {$R *.dfm} procedure TForm1.SetVisibleFrame(frame: TFrame); begin if Assigned(FVisibleFrame) then FVisibleFrame.Free; FVisibleFrame := frame; end; procedure TForm1.FormCreate(Sender: TObject); begin FMysql := TMysqlClient.create; StatusBar2.Panels.Add(); StatusBar2.Panels[0].Text:='Nicht Verbunden'; // Eigenschaften setzen FMysql.Host := 'antieo.de'; FMysql.port := 3306; FMysql.user :='delphi'; FMysql.password := 'sqltest'; FMysql.UnixSocket := ''; FMysql.Db := 'delphi'; // Datenbank auf dem Server FMysql.UseNamedPipe := false; FMysql.UseSSL := false; FMysql.Compress := true; FMysql.TrySockets := false; end; // Bei Programmende muss das Objekt natürlich auch wieder freigegeben werden: procedure TForm1.FormDestroy(Sender: TObject); begin FMysql.Free; if FResult<>nil then FResult.free; FMysql.close; end; procedure TForm1.AlleKundenanzeigen1Click(Sender: TObject); var q: string; ex: boolean; j: integer; begin VisibleFrame := TKunden_gesamt.Create(self); with VisibleFrame as TKunden_gesamt do begin Parent:=Form1; Left:=10; Top:=10; width:=910; height:=570; if assigned(FResult) then begin if FMysql.Status<>MYSQL_STATUS_READY then ShowMessage('Ein Ergebnis wurde unvollständig gelesen!'); FreeAndNil(FResult); end; q := 'SELECT id, vorname, name FROM kunden ORDER BY id'; FResult := FMysql.query(q, true, ex); if assigned(FResult) then begin cou_res:= FResult.RowsCount-1; if assigned(FResult) then begin q := 'SELECT id, vorname, name FROM kunden ORDER BY id'; FResult := FMysql.query(q, true, ex); if assigned(FResult) then begin // ShowMessage('Query: OK - Ergebnis gespeichert'); cou_res:= FResult.RowsCount-1; for j:=0 to FResult.RowsCount-1 do begin ku_list.items[j]:= FResult.FieldValue(2)+' - '+ FResult.FieldValue(1) ; ku_id.Items[j]:= FResult.FieldValue(0); FResult.Next; end; FreeAndNil(FResult); end else if ex then begin ShowMessage('Query: OK - ausgeführt') end else ShowMessage('Query fehlgeschlagen: '+FMysql.LastError); end; end; end; // FMysql(freeAndNil); end; procedure TForm1.Kundehinzufgen2Click(Sender: TObject); begin VisibleFrame := TKu_hinzu.Create(self); with VisibleFrame as TKu_hinzu do begin Parent:=Form1; Left:=10; Top:=10; width:=910; height:=570; end; end; procedure TForm1.Kundendatenbearbeiten1Click(Sender: TObject); begin VisibleFrame := TKu_bea.Create(self); with VisibleFrame as TKu_bea do begin Parent:=Form1; Left:=10; Top:=10; width:=910; height:=570; end; end; procedure TForm1.KundeSuchen1Click(Sender: TObject); begin VisibleFrame := TKu_suche1.Create(self); with VisibleFrame as TKu_suche1 do begin Parent:=Form1; Left:=10; Top:=10; width:=910; height:=570; end; end; end. |
Zitat |
Registriert seit: 6. Apr 2005 10.109 Beiträge |
#12
Vielleicht besser so:
Delphi-Quellcode:
marabu
procedure TForm1.AlleKundenanzeigen1Click(Sender: TObject);
var q: string; ex: boolean; j: integer; begin if (VisibleForm = nil) or not (VisibleForm is TKunden_Gesamt) then VisibleFrame := TKunden_gesamt.Create(self); // ... |
Zitat |
Registriert seit: 25. Apr 2006 197 Beiträge |
#13
Schande auf mein Haupt,
darauf hätte ich auch selbst kommen können, da einfach ne abfrage vor zu setzten *schäm* Nun versuche ich das Problem in den Griff zu bekommen, das ich aus einer Frame in eine Andere wecheln möchte. Nach meiner Logig habe ich es so versucht. Ich möchte vom Frame Kunden Beareiten, zu kunden Suchen wechseln wenn ich es so mache, dann bekomm eich ein Access Violation.....
Delphi-Quellcode:
unit ku_bearb;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, umysqlvio, uMysqlCT, uMysqlClient, uMysqlHelpers, ku_suche; {$I mysqlinc.inc} type Tku_bea = class(TFrame) GroupBox1: TGroupBox; Label10: TLabel; Label9: TLabel; Label8: TLabel; Label7: TLabel; Label5: TLabel; Label4: TLabel; Label3: TLabel; Label1: TLabel; ku_bea_plz: TEdit; ku_bea_vname: TEdit; ku_bea_strasse: TEdit; ku_bea_hsnr: TEdit; ku_bea_nname: TEdit; ku_bea_tel: TEdit; ku_bea_fax: TEdit; ku_bea_url: TEdit; ku_bea_email: TEdit; ku_bea_zusatz: TMemo; GroupBox2: TGroupBox; Button2: TButton; ku_bea_ort: TComboBox; Button3: TButton; Button1: TButton; Label2: TLabel; Button4: TButton; GroupBox3: TGroupBox; u_hinweis: TLabel; ku_bea_kdnr: TEdit; Label11: TLabel; procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure ku_bea_plzChange(Sender: TObject); procedure ku_bea_kdnrChange(Sender: TObject); private FMysql: TMysqlClient; FResult: TMysqlResult; public { Public-Deklarationen } end; var kd_nname, kd_vname, kd_strasse, kd_hsnr, kd_plz, kd_ort, kd_email: string; kd_url, kd_zusatz, kd_tel, kd_fax: string; TKu_suche1: TFrame; anz_frame: TFrame; anz_frame2: TFrame; implementation uses haupt; {$R *.dfm} procedure Tku_bea.ku_bea_kdnrChange(Sender: TObject); var q: string; ex: boolean; begin if length(ku_bea_kdnr.Text) < 10 then u_hinweis.Caption:='Bitte Kundennummer vollständig eingeben'; if length(ku_bea_kdnr.Text) = 10 then begin u_hinweis.Caption:='Prüfe Kundendaten'; FMysql := TMysqlClient.create; // Eigenschaften setzen FMysql.Host := 'antieo.de'; FMysql.port := 3306; FMysql.user :='delphi'; FMysql.password := 'sqlmain'; FMysql.UnixSocket := ''; FMysql.Db := 'delphi'; // Datenbank auf dem Server FMysql.UseNamedPipe := false; FMysql.UseSSL := false; FMysql.Compress := true; FMysql.TrySockets := false; q := 'SELECT name, vorname, strasse, hsnr, plz, ort, tel, fax, email, url, zusatz FROM kunden WHERE kdnr="'+ ku_bea_kdnr.Text +'"'; FResult := FMysql.query(q, true, ex); if FResult.RowsCount > 0 then begin // Daten Einlesen kd_nname:= Fresult.FieldValue(0); kd_vname:= Fresult.FieldValue(1); kd_strasse:= Fresult.FieldValue(2); kd_hsnr:= Fresult.FieldValue(3); kd_plz:= Fresult.FieldValue(4); kd_ort:= Fresult.FieldValue(5); kd_tel:= Fresult.FieldValue(6); kd_fax:= Fresult.FieldValue(7); kd_email:= Fresult.FieldValue(8); kd_url:= Fresult.FieldValue(9); kd_zusatz:= Fresult.FieldValue(10); // Daten zuweisen; ku_bea_plz.text := kd_plz; ku_bea_nname.text := kd_nname; ku_bea_vname.text := kd_vname; ku_bea_strasse.text := kd_strasse; ku_bea_hsnr.text := kd_hsnr; ku_bea_ort.text := kd_ort; ku_bea_tel.text := kd_tel; ku_bea_fax.text := kd_fax; ku_bea_email.text := kd_email; ku_bea_url.text := kd_url; ku_bea_zusatz.text := kd_zusatz; FreeAndNil(Fresult); // Neue Optionen ku_bea_kdnr.Enabled := False; u_hinweis.Caption := 'Kunde kann bearbeitet werden'; // Buttons Aktivieren / Deaktivieren button1.Enabled:= true; button2.Enabled:= true; button3.Enabled:= false; button4.Enabled:= true; // felder aktivieren ku_bea_nname.Enabled := true; ku_bea_vname.Enabled := true; ku_bea_strasse.Enabled := true; ku_bea_hsnr.Enabled := true; ku_bea_plz.Enabled := true; ku_bea_ort.Enabled := true; ku_bea_tel.Enabled := true; ku_bea_fax.Enabled := true; ku_bea_email.Enabled := true; ku_bea_url.Enabled := true; ku_bea_zusatz.Enabled := true; ku_bea_nname.SetFocus; end else u_hinweis.Caption:= 'Kundennummer nicht in der Datenbank'; end; end; procedure Tku_bea.ku_bea_plzChange(Sender: TObject); var q: string; j: integer; ex: boolean; begin ku_bea_ort.Text:=''; if length(ku_bea_plz.text) = 5 then begin ku_bea_ort.Text:=''; FMysql := TMysqlClient.create; // Eigenschaften setzen FMysql.Host := 'antieo.de'; FMysql.port := 3306; FMysql.user :='delphi'; FMysql.password := 'sqlmain'; FMysql.UnixSocket := ''; FMysql.Db := 'delphi'; // Datenbank auf dem Server FMysql.UseNamedPipe := false; FMysql.UseSSL := false; FMysql.Compress := true; FMysql.TrySockets := false; q:= 'SELECT Ort FROM orte Where PLZ ="'+ku_bea_plz.text+'"'; FResult := FMysql.query(q, true, ex); ku_bea_ort.Items.Clear; if Fresult.RowsCount > 0 then begin If Fresult.RowsCount = 1 then ku_bea_ort.Text:=FResult.FieldValue(0) else ku_bea_ort.Text:='Bitte wählen'; for j:=0 to FResult.RowsCount-1 do begin ku_bea_ort.Items.add(FResult.FieldValue(0)); FResult.Next; end; end; FreeAndNil(FResult); end; end; procedure Tku_bea.Button1Click(Sender: TObject); begin ku_bea_plz.text := kd_plz; ku_bea_nname.text := kd_nname; ku_bea_vname.text := kd_vname; ku_bea_strasse.text := kd_strasse; ku_bea_hsnr.text := kd_hsnr; ku_bea_ort.text := kd_ort; ku_bea_tel.text := kd_tel; ku_bea_fax.text := kd_fax; ku_bea_email.text := kd_email; ku_bea_url.text := kd_url; ku_bea_zusatz.text := kd_zusatz; end; procedure Tku_bea.Button4Click(Sender: TObject); begin // Neue Optionen ku_bea_kdnr.Enabled := true; ku_bea_kdnr.Enabled := true; // Buttons Aktivieren / Deaktivieren button1.Enabled:= false; button2.Enabled:= false; button3.Enabled:= true; button4.Enabled:= false; // felder Deaktivieren ku_bea_nname.Enabled := false; ku_bea_vname.Enabled := false; ku_bea_strasse.Enabled := false; ku_bea_hsnr.Enabled := false; ku_bea_plz.Enabled := false; ku_bea_ort.Enabled := false; ku_bea_tel.Enabled := false; ku_bea_fax.Enabled := false; ku_bea_email.Enabled := false; ku_bea_url.Enabled := false; ku_bea_zusatz.Enabled := false; // Felder Leeren ku_bea_kdnr.text := ''; ku_bea_plz.text := ''; ku_bea_nname.text := ''; ku_bea_vname.text := ''; ku_bea_strasse.text := ''; ku_bea_hsnr.text := ''; ku_bea_ort.text := ''; ku_bea_tel.text := ''; ku_bea_fax.text := ''; ku_bea_email.text := ''; ku_bea_url.text := ''; ku_bea_zusatz.text := ''; u_hinweis.Caption := 'Bitte vollständige Kundennummer eingeben'; ku_bea_kdnr.SetFocus; end; // Daten Updaten procedure Tku_bea.Button2Click(Sender: TObject); var q1,q4,q5: string; q: string; ex: boolean; begin FMysql.Host := 'antieo.de'; FMysql.port := 3306; FMysql.user :='delphi'; FMysql.password := 'sqlmain'; FMysql.UnixSocket := ''; FMysql.Db := 'delphi'; // Datenbank auf dem Server FMysql.UseNamedPipe := false; FMysql.UseSSL := false; FMysql.Compress := true; FMysql.TrySockets := false; // Daten Vergleichen q1:= 'UPDATE kunden SET '; q4:=''; if kd_nname <> ku_bea_nname.Text then q4:= q4+ ', name ="' +ku_bea_nname.Text+'"'; if kd_vname <> ku_bea_vname.Text then q4:= q4+ ', vname ="' +ku_bea_vname.Text+'"'; if kd_strasse <> ku_bea_strasse.Text then q4:= q4+ ', strasse ="' +ku_bea_strasse.Text+'"'; if kd_hsnr <> ku_bea_hsnr.Text then q4:= q4+ ', hsnr ="' +ku_bea_hsnr.Text+'"'; if kd_plz <> ku_bea_plz.Text then q4:= q4+ ', plz ="' +ku_bea_plz.Text+'"'; if kd_ort <> ku_bea_ort.Text then q4:= q4+ ', ort ="' +ku_bea_ort.Text+'"'; if kd_tel <> ku_bea_tel.Text then q4:= q4+ ', tel ="' +ku_bea_tel.Text+'"'; if kd_fax <> ku_bea_fax.Text then q4:= q4+ ', fax ="' +ku_bea_fax.Text+'"'; if kd_email <> ku_bea_email.Text then q4:= q4+ ', email ="' +ku_bea_email.Text+'"'; if kd_url <> ku_bea_url.Text then q4:= q4+ ', url ="' +ku_bea_url.Text+'"'; if kd_zusatz <> ku_bea_zusatz.Text then q4:= q4+ ', zusatz ="' +ku_bea_zusatz.Text+'"'; if length(q4) > 0 then begin q5:= ' WHERE kdnr="'+ku_bea_kdnr.Text+'"'; Delete(q4,1,2); q:= q1+q4+q5 ; FResult := FMysql.query(q, true, ex); button1.Enabled:=false; button2.Enabled:=false; button3.Enabled:=true; button4.Enabled:=true; ku_bea_nname.Enabled := false; ku_bea_vname.Enabled := false; ku_bea_strasse.Enabled := false; ku_bea_hsnr.Enabled := false; ku_bea_plz.Enabled := false; ku_bea_ort.Enabled := false; ku_bea_tel.Enabled := false; ku_bea_fax.Enabled := false; ku_bea_email.Enabled := false; ku_bea_url.Enabled := false; ku_bea_zusatz.Enabled := false; end; u_hinweis.Caption := 'Kunde Erfolgreich Bearbeitet'; end; procedure Tku_bea.Button3Click(Sender: TObject); begin form1.KundeSuchen1.Click; end; end. |
Zitat |
Registriert seit: 6. Apr 2005 10.109 Beiträge |
#14
Hi.
Wenn du den Wechsel des Frames über Button3 auslöst, dann sägst du an dem Ast auf dem du sitzt. Vielleicht ist eine Werkzeugleiste ein passender Ort zur Aufnahme deines Schalters. Wenn du es aber so belassen willst, dann ersetze den Aufruf von Form1.KundeSuchen1.Click() besser durch eine custom message. Grüße vom marabu |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |