![]() |
MDI - Abhängigkeiten?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich schreibe im Moment ein kleines Verwatungs-Panel. Leider ist es schon fast 3 Jahre her das ich mit Delphi/Pascal gearbeitet habe. Daher meine Hoffnung, das ihr mir helfen könnt. Wie ihr im Anhang sehen könnt, arbeite ich mit MDI. Die Suche und ähnliches funktioniert tadellos, nur leider, wenn ich die Kundendaten öffne und dann den "Button1" drücke, sollen regulär die Daten geholt werden (Kundennummer aus dem StringGrid vom 1. Form) nur leider erhalte ich den Fehler, den ihr auf dem Screen seht. So öffne ich das 2. Form:
Delphi-Quellcode:
Button1, löst folgende Aktion aus:
Tkundendaten_view.Create(kunden_suche);
Delphi-Quellcode:
ShowMessage(kunden_suche.user_sheet.Cells[0,0]); //Nur ein Test ob es klappt
Könnt ihr mir eventuell sagen, woran das liegt? |
Re: MDI - Abhängigkeiten?
Kennt den die 2. Form kunden_suche?
|
Re: MDI - Abhängigkeiten?
Jap, die 2 kennen sich
Delphi-Quellcode:
//Edit: Dieser Fehler tritt nicht nur beim StingGrid auf, sondern auf alle Felder (Input, ...) die ich anspreche, obwohl mir der Delphi autocompleter (Also das Ding, wenn man nen Punkt drückt) diese Eigenschaft eindeutig ausgibt.
implementation
uses ..., kunden_suche_form; |
Re: MDI - Abhängigkeiten?
Hi,
ein wenig mehr Code könnte nützlich sein. Scheint ein Instanzenproblem zu sein. Gruss |
Re: MDI - Abhängigkeiten?
Das Kundensuche Formular:
Delphi-Quellcode:
Und das Kundendaten-Formular:
unit kunden_suche_form;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type Tkunden_suche = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; edit_kundennummer: TEdit; GroupBox2: TGroupBox; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; user_sheet: TStringGrid; Button1: TButton; Button2: TButton; procedure user_sheetClick(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public zelle : integer; end; var kunden_suche: Tkunden_suche; implementation uses hauptformular, kundendaten_view_form; {$R *.dfm} procedure Tkunden_suche.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; hs_kis.StatusBar1.Panels[0].Text := 'Status: Fenster "Kundensuche" erfolgreich geschlossen'; end; procedure Tkunden_suche.FormShow(Sender: TObject); begin hs_kis.StatusBar1.Panels[0].Text := 'Status: Fenster "Kundensuche" erfolgreich generiert'; with user_sheet do begin Cells[0,0] := 'Kundennummer'; Cells[1,0] := 'Name'; Cells[2,0] := 'Vorname'; Cells[3,0] := 'Firma'; Cells[4,0] := 'Sprache'; end; end; procedure Tkunden_suche.Button1Click(Sender: TObject); var kundennummer, cr, i, j : integer; sql : string; ex : boolean; begin if edit_kundennummer.Text <> '' then begin try kundennummer := strtoint(edit_kundennummer.Text) except on EConvertError do hs_kis.StatusBar1.Panels[0].Text := 'Status: Fehler - Das ist keine Kundennummer!'; end; hs_kis.FMysql.select_db('syscp'); sql := 'SELECT customernumber, name, firstname, company, def_language FROM panel_customers WHERE customernumber = "'+inttostr(kundennummer)+'"'; hs_kis.FResult := hs_kis.FMysql.query(sql, true, ex); if assigned(hs_kis.FResult) then begin cr := hs_kis.FResult.RecNo; user_sheet.RowCount := hs_kis.FResult.RowsCount+1; for i:=0 to hs_kis.FResult.RowsCount-1 do begin for j:=0 to hs_kis.FResult.FieldsCount-1 do user_sheet.Cells[j,i+1] := hs_kis.FResult.FieldValue(j); hs_kis.FResult.Next; end; if i = 1 then hs_kis.StatusBar1.Panels[0].Text := 'Status: '+inttostr(i)+' Datensatz gefunden' else hs_kis.StatusBar1.Panels[0].Text := 'Status: '+inttostr(i)+' Datensätze gefunden'; if i > 0 then button2.Enabled := true else begin user_sheet.RowCount := 2; user_sheet.FixedRows := 1; end; if i > 1242900 then begin user_sheet.RowCount := 2; user_sheet.FixedRows := 1; button2.Enabled := false; hs_kis.StatusBar1.Panels[0].Text := 'Status: 0 Datensätze gefunden'; end; end else begin hs_kis.StatusBar1.Panels[0].Text := 'Status: Query konnte nicht ausgeführt werden'; end; end else begin //Wenn KD Nr nicht ausgefüllt end; end; procedure Tkunden_suche.Button2Click(Sender: TObject); begin FreeAndNil(hs_kis.FResult); Tkundendaten_view.Create(kunden_suche); end; procedure Tkunden_suche.user_sheetClick(Sender: TObject); begin zelle := user_sheet.Row; end; end.
Delphi-Quellcode:
"hs_kis" ist nur das Hauptformular. Ich hoffe das reicht
unit kundendaten_view_form;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type Tkundendaten_view = class(TForm) RichEdit1: TRichEdit; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var kundendaten_view: Tkundendaten_view; implementation uses hauptformular, kunden_suche_form; {$R *.dfm} procedure Tkundendaten_view.FormCreate(Sender: TObject); begin hs_kis.StatusBar1.Panels[0].Text := 'Status: Fenster "Kundendaten" erfolgreich erstellt'; end; procedure Tkundendaten_view.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; hs_kis.StatusBar1.Panels[0].Text := 'Status: Fenster "Kundendaten" erfolgreich geschlossen'; end; procedure Tkundendaten_view.FormShow(Sender: TObject); var kundennummer, name, vorname : string; begin end; procedure Tkundendaten_view.Button1Click(Sender: TObject); begin TRY ShowMessage(kunden_suche.edit_kundennummer.Text) EXCEPT ON E : Exception DO hs_kis.StatusBar1.Panels[0].Text := 'Status: Fehler - '+E.Message+' - '+E.ClassName; end; end; end. |
Re: MDI - Abhängigkeiten?
In MDI ist es meistens nicht sinnvoll, von einem Formular auf ein anderes Kindformular zuzugreifen, da es immer mehrere Formulare dieser Art geben kann. Daher lösche ich bei MDI-Kind-Formularen auch immer die vorgegebene Variable (var kunden_suche: Tkunden_suche). Du füllst diese Variable auch niemals aus, daher kann es beim Zugriff nur eine Zugriffsverletzung geben.
|
Re: MDI - Abhängigkeiten?
Hallo,
doch das Eingabefeld wird gefüllt, ohne dieses, kommt man gar nicht in das andere Formular rein. Nur egal wie ich das auch mache, ich kann auf den Wert, auch wenn er vorher in einer variable gespeichert war, nicht zugreifen. :( |
Re: MDI - Abhängigkeiten?
Wo füllst du kunden_suche?
|
Re: MDI - Abhängigkeiten?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
Re: MDI - Abhängigkeiten?
Das weiß ich. Wo weist du der Variablen einen Wert zu? Wird das Formular automatisch erzeugt?
|
Re: MDI - Abhängigkeiten?
Hallo,
nein das Formular wird erst nach einem Klick auf einen Button erzeugt.dann erscheint erst das Fenster was man auf dem screen sieht und dann ein neues. |
Re: MDI - Abhängigkeiten?
Wie erzeugst du es?
|
Re: MDI - Abhängigkeiten?
Guten Abend,
was Philip wissen will ist, ob Du das Formular mit dem Buttonclick erzeugst (create) oder nur sichtbar machst (show, showModal)? Grüße Klaus |
Re: MDI - Abhängigkeiten?
Ahh Verzeihung, da ich es oben im 1. Post schon erwähnt hatte, dachte ich, das dies nicht gemeint war.
Ich erzeuge es mit "Create" |
Re: MDI - Abhängigkeiten?
Ich sähe gern den Code.
|
Re: MDI - Abhängigkeiten?
Siehe Post #5
|
Re: MDI - Abhängigkeiten?
Wo finde ich dort die Erzeugung von kunden_suche?
|
Re: MDI - Abhängigkeiten?
Hier :D
Delphi-Quellcode:
unit hauptformular;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ToolWin, Menus, XPMan, Buttons, ExtCtrls, umysqlvio, uMysqlCT, uMysqlClient, uMysqlHelpers; {$I mysqlinc.inc} type Ths_kis = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; Beenden1: TMenuItem; ToolBar1: TToolBar; StatusBar1: TStatusBar; XPManifest1: TXPManifest; SpeedButton1: TSpeedButton; Timer1: TTimer; Timer2: TTimer; procedure Timer2Timer(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormResize(Sender: TObject); procedure Beenden1Click(Sender: TObject); private public FMysql: TMysqlClient; FResult: TMysqlResult; end; var hs_kis: Ths_kis; implementation uses kunden_suche_form, login_form_form; {$R *.dfm} procedure Ths_kis.Beenden1Click(Sender: TObject); begin hs_kis.Close; end; procedure Ths_kis.FormResize(Sender: TObject); begin StatusBar1.Panels[0].Width := hs_kis.Width - 140; end; procedure Ths_kis.Timer1Timer(Sender: TObject); begin StatusBar1.Panels[1].Text := ' '+DateTimeToStr(Now); end; procedure Ths_kis.SpeedButton1Click(Sender: TObject); begin Tkunden_suche.Create(Self); end; procedure Ths_kis.FormShow(Sender: TObject); begin // Eigenschaften setzen FMysql.Host := 'xxx.de'; FMysql.port := 3306; //FMysql.user :='xxx'; //FMysql.password := 'xxx'; FMysql.UnixSocket := ''; FMysql.Db := 'xxx'; // Datenbank auf dem Server FMysql.UseNamedPipe := false; FMysql.UseSSL := false; FMysql.Compress := true; FMysql.TrySockets := false; if FMysql.Connect then begin StatusBar1.Panels[0].Text := 'Status: Verbindung zum Datenbakserver aufgebaut'; Tkunden_suche.Create(Self); end else begin //StatusBar1.Panels[0].Text := 'Fehler beim Verbinden: '+FMysql.LastError; //SpeedButton1.Enabled := false; end; end; procedure Ths_kis.FormCreate(Sender: TObject); begin FMysql := TMysqlClient.create; end; procedure Ths_kis.FormDestroy(Sender: TObject); begin FMysql.Free; if FResult<>nil then FResult.free; end; procedure Ths_kis.Timer2Timer(Sender: TObject); begin case login_form.login_count of 0: ; 1: ; 2: ; 3: ; else hs_kis.Close; end; end; end. |
Re: MDI - Abhängigkeiten?
Zitat:
|
Re: MDI - Abhängigkeiten?
In der Kunden suche Unit (Zeile 40)
Delphi-Quellcode:
unit kunden_suche_form;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type Tkunden_suche = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; edit_kundennummer: TEdit; GroupBox2: TGroupBox; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; user_sheet: TStringGrid; Button1: TButton; Button2: TButton; procedure user_sheetClick(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } public zelle : integer; end; var kunden_suche: Tkunden_suche; implementation uses hauptformular, kundendaten_view_form; {$R *.dfm} procedure Tkunden_suche.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; hs_kis.StatusBar1.Panels[0].Text := 'Status: Fenster "Kundensuche" erfolgreich geschlossen'; end; procedure Tkunden_suche.FormShow(Sender: TObject); begin hs_kis.StatusBar1.Panels[0].Text := 'Status: Fenster "Kundensuche" erfolgreich generiert'; with user_sheet do begin Cells[0,0] := 'Kundennummer'; Cells[1,0] := 'Name'; Cells[2,0] := 'Vorname'; Cells[3,0] := 'Firma'; Cells[4,0] := 'Sprache'; end; end; procedure Tkunden_suche.Button1Click(Sender: TObject); var kundennummer, cr, i, j : integer; sql : string; ex : boolean; begin if edit_kundennummer.Text <> '' then begin try kundennummer := strtoint(edit_kundennummer.Text) except on EConvertError do hs_kis.StatusBar1.Panels[0].Text := 'Status: Fehler - Das ist keine Kundennummer!'; end; hs_kis.FMysql.select_db('syscp'); sql := 'SELECT customernumber, name, firstname, company, def_language FROM panel_customers WHERE customernumber = "'+inttostr(kundennummer)+'"'; hs_kis.FResult := hs_kis.FMysql.query(sql, true, ex); if assigned(hs_kis.FResult) then begin cr := hs_kis.FResult.RecNo; user_sheet.RowCount := hs_kis.FResult.RowsCount+1; for i:=0 to hs_kis.FResult.RowsCount-1 do begin for j:=0 to hs_kis.FResult.FieldsCount-1 do user_sheet.Cells[j,i+1] := hs_kis.FResult.FieldValue(j); hs_kis.FResult.Next; end; if i = 1 then hs_kis.StatusBar1.Panels[0].Text := 'Status: '+inttostr(i)+' Datensatz gefunden' else hs_kis.StatusBar1.Panels[0].Text := 'Status: '+inttostr(i)+' Datensätze gefunden'; if i > 0 then button2.Enabled := true else begin user_sheet.RowCount := 2; user_sheet.FixedRows := 1; end; if i > 1242900 then begin user_sheet.RowCount := 2; user_sheet.FixedRows := 1; button2.Enabled := false; hs_kis.StatusBar1.Panels[0].Text := 'Status: 0 Datensätze gefunden'; end; end else begin hs_kis.StatusBar1.Panels[0].Text := 'Status: Query konnte nicht ausgeführt werden'; end; end else begin //Wenn KD Nr nicht ausgefüllt end; end; procedure Tkunden_suche.Button2Click(Sender: TObject); begin FreeAndNil(hs_kis.FResult); Tkundendaten_view.Create(kunden_suche); end; procedure Tkunden_suche.user_sheetClick(Sender: TObject); begin zelle := user_sheet.Row; end; end. |
Re: MDI - Abhängigkeiten?
Was Philip meint: statt
Zitat:
Delphi-Quellcode:
heißen.
kunden_suche := Tkunden_suche.Create(Self);
|
Re: MDI - Abhängigkeiten?
Exakt. Und ich weise nochmals darauf hin, dass ein solches Programmverhalten eigentlich in einem MDI nichts zu suchen hat.
|
Re: MDI - Abhängigkeiten?
Ähm... ja.. genau... Großes Dankeschön... es klappt *freu* =)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz