Autor |
Beitrag |
Flash106
      
Beiträge: 234
D7 Ent
|
Verfasst: Mi 29.12.04 17:29
Hallo,
kann mir jemand sagen wie ich per source einer SQl Query eine SQL Connection zuweisen kann??
Das funktioniert nicht:
Quelltext 1:
| SQLQuery1.SQLConnection := SQLConnection1 |
Die komponenten exsitieren schon auf dem formular. Danke! =)
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Mi 29.12.04 17:37
Flash106 hat folgendes geschrieben: | [...] kann mir jemand sagen wie ich per source einer SQl Query eine SQL Connection zuweisen kann??
Das funktioniert nicht:
Quelltext 1:
| SQLQuery1.SQLConnection := SQLConnection1 |
Die komponenten exsitieren schon auf dem formular. Danke! =) |
Hat wer eine Kristallkugel günstig abzugeben?
Was heisst denn "funktioniert nicht"? Dein hier gezeigter Code ist eigentlich korrekt.
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Mi 29.12.04 17:38
Hallo!
Das sieht aber richtig aus. Meine Glaskugel ist kaputt, bitte nenne mir die Fehlermeldung. Kannst du compilieren?
Edit: Halt, ich hab´s! Füge ein Semikolon ans Ende der Zeile hinzu!
Cu,
Udontknow
|
|
Flash106 
      
Beiträge: 234
D7 Ent
|
Verfasst: Mi 29.12.04 17:39
ja sorry hab ich auch grad festgestellt es ging nich weil ich in einer komponente hab und gerade festgestellt hab das es an der position leigt wo ich den source schreibe. also wann er ausgeführt wird.. weis jemand wann das ist? Also wenn ich die standart komponenten nehme von delphi und den source ins onCreate des forms schreibe gehts... wo muss ich es in einer komponente reinschreiben? Bei Create gehts nicht.. wo dann??
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Mi 29.12.04 18:24
Flash106 hat folgendes geschrieben: | [für mich weitestgehend Unverständliches] |
Alsoooo, jetzt mal gaaanz ruhig...  Wo ist Dein Problem? Erklär doch mal, was Du machen willst. Ein wenig Code ist auch immer ganz hilfreich. Ich vermute, Du hast eine Komponente und fragst Dich, wann Du auf andere Komponenten des Parents zugreifen kannst (das wäre dann ein allgemeines Problem bzgl. Komponentenprogrammierung) - aber wie gesagt: ich habe auch dieses Jahr keine Kristallkugel geschenkt bekommen.
|
|
Flash106 
      
Beiträge: 234
D7 Ent
|
Verfasst: Mi 29.12.04 18:48
ich habe eine sqlconnection kompo abgeleitet in der ich ein query komponente erstellt habe. naja das is alles müll.. hab es jetz anders herum gemacht. habe eine query komponente erstellt die ein SendData procedure enthält. Sie soll beim aufruf daten an einen sql server schicken. die SendData procedure soll von einer anderen von mir abgeleiteten edit komponente beim onChange ereginis aufgerufen werden.. klappt aber nicht
hier mal der source:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TMyCustomEdit.Change; begin mySQLQuery1.SendData(myCustomEdit1.Text,'tbTest','vName'); end;
.. var mySQLQuery1: TmySQLQuery; ..
procedure TmySQLQuery.SendData(vText, vTable, vField : string); begin with mySQLQuery1.SQL do begin clear; Add ('UPDATE ' + vTable + ' SET ' + vField + ' = ' + QuotedStr(vText)); end; mySQLQuery1.ExecSQL; end; .. |
ok so? =)..
ja jedenfall kann ich die edit komponenten jetz nicht mal mehr aufs form setzen wenn ich das was in OnChange steht drinne lasse..  klappt also gar nicht
Moderiert von UGrohne: Code- durch Delphi-Tags ersetzt.
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Mi 29.12.04 19:13
Hinreichender Beweis für die Notwendigkeit von Kristallkugeln:
Flash106 hat folgendes geschrieben: | [...]klappt aber nicht[...]
klappt also gar nicht  |
Tipp: Der erste Schritt für eine mögliche Problemlösung ist immer die genaue Definition des Problems.
Was klappt denn nicht?
Das hier:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TmySQLQuery.SendData(vText, vTable, vField : string); begin with mySQLQuery1.SQL do begin clear; Add ('UPDATE ' + vTable + ' SET ' + vField + ' = ' + QuotedStr(vText)); end; mySQLQuery1.ExecSQL; end; |
ist zumindest verbesserungswürdig, wenn Du es so in der Klassendefinition stehen hast.
Die Klasse kann ja schliesslich nichts von ihren Instanzen wissen:
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TmySQLQuery.SendData(vText, vTable, vField : string); begin SQL.Text := 'UPDATE ' + vTable + ' SET ' + vField + ' = ' + QuotedStr(vText); ExecSQL; end; |
Genauso hier:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TMyCustomEdit.Change; begin mySQLQuery1.SendData(myCustomEdit1.Text,'tbTest','vName'); end; |
Woher weiss TMyCustomEdit etwas von myCustomEdit1?
Und bist Du sicher, dass TMyCustomEdit etwas von mySQLQuery1 weiss? Ist mySQLQuery1 eine Klassenvariable von TMyCustomEdit oder eine Variable des Parents von einer Instanz von TMyCustomEdit?
|
|
Flash106 
      
Beiträge: 234
D7 Ent
|
Verfasst: Mi 29.12.04 19:21
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Mi 29.12.04 22:58
Flash106 hat folgendes geschrieben: | wenn ich das hier IM source der edit komponente drinne (also mit override deklariert) lasse kann sie nicht mehr aufs form setzen da ich eine speicherfehler meldung bekommen
Quelltext 1: 2: 3: 4:
| procedure TMyCustomEdit.Change; begin mySQLQuery1.SendData(myCustomEdit1.Text,'tbTest','vName'); end; | |
Warum override? Warum fehlt inherited? Was sagt denn die "Speicherfehler Meldung"? Wo genau in der Klassendefinition TMyCustomEdit ist mySQLQuery1 deklariert und v.a. initialisiert?
Zitat: |
wenn ich die eine code zeile direkt ins OnChange der komponente schreibe nach dem ich sie aufs form gesetzt habe passiert nix. keine fehler aber auch nix in der DB. |
Willst Du wirklich bei jeder Änderung von TMyCustomEdit (also auch, wenn der Benutzer nur ein Zeichen eintippt) etwas in der Datenbank machen? Ansonsten glaube ich Dir jetzt einfach mal nicht, dass nichts passiert. Hast Du schon mal einen Breakpoint an der betreffenden Stelle gesetzt?
Zitat: | So und myCustomEdit1 ist in der TmyCustomEdit unit deklriert:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| type TmyCustomEdit = class(TEdit) private ... ... var myCustomEdit1 : TmyCustomEdit; ... | |
Und hat da genau was zu suchen und ist wo und warum initialisiert?
Bitte beantworte alle meine Fragen ausführlich - vielleicht wird Dir dann das Prinzip klarer.
|
|
Flash106 
      
Beiträge: 234
D7 Ent
|
Verfasst: Mi 29.12.04 23:08
So inherited ist drinn..
mySQLQuery1 ist in der customedit komponente nicht deklariert. ich habe die mySQLQueryunit einfach eingebunden und dort ist mySQLQuery1 deklariert.
wenn ich das:
Quelltext 1: 2: 3: 4: 5:
| procedure TMyCustomEdit.Change; begin inherited; mySQLQuery1.SendData(Text,'tbTest','vName'); end; |
im source lasse und ich möchte das programm compilieren bekomme ich den fehler:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00482F7C in Modul 'Project1.exe'. Lesen von Adresse 00000200'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
puh.. alles was ich will ist doch einfach nur das das editfeld bei OnChange eine procedure aufruft die in einer anderen Unit steht.. die aus der anderen komponente ...

|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: Mi 29.12.04 23:21
das problem ist wahrscheinlich dass eine Komponente zur Laufzeit nicht auf eine andere Komponente zugreifen kann.
du musst das Onchange Ereignis also nicht in der Komponente, sonder auf deinem Formular wo die 2 Kompos oben sind, definieren.
gruss retnyg
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Mi 29.12.04 23:25
Flash106 hat folgendes geschrieben: | So inherited ist drinn.. |
Warum?
Zitat: | mySQLQuery1 ist in der customedit komponente nicht deklariert. ich habe die mySQLQueryunit einfach eingebunden und dort ist mySQLQuery1 deklariert. |
Und wo ist es initialisiert?
Zitat: | wenn ich das:
Quelltext 1: 2: 3: 4: 5:
| procedure TMyCustomEdit.Change; begin inherited; mySQLQuery1.SendData(Text,'tbTest','vName'); end; |
im source lasse und ich möchte das programm compilieren bekomme ich den fehler:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00482F7C in Modul 'Project1.exe'. Lesen von Adresse 00000200'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. |
Das liegt daran, dass mySQLQuery1 nicht initialisiert ist. Nebenbei: Du sprachst vom "Compilieren" und zeigst eine Exception beim Debuggen - je präziser Du Dich ausdrückst, desto eher kann man Dir weiterhelfen.
Zitat: | .. alles was ich will ist doch einfach nur das das editfeld bei OnChange eine procedure aufruft die in einer anderen Unit steht.. die aus der anderen komponente ...
 |
Was denn? Eine Routine aus einer anderen Komponente oder aus einer anderen Unit?
Ich hatte Dich gebeten, alle Fragen zu beantworten, vielleicht wird es dann klarer.
Du darfst v.a. Klassendeklarationen, Klassenvariablen und Instanzen nicht durcheinanderwürfeln.
|
|
Flash106 
      
Beiträge: 234
D7 Ent
|
Verfasst: Mi 29.12.04 23:45
oh man sorry... ich merk schon .. is wohl zu hoch für mich... kann mich wohl nicht ausdrücken..  .. also das letzte was gepostet wurde versuche ich nochmal... danke..
|
|
Robert.Wachtel
      
Beiträge: 895
Erhaltene Danke: 7
Windows 7 Ultimate x64
D5 Ent, D7 Arch, RAD Studio 2010 Pro, VS 2008
|
Verfasst: Do 30.12.04 00:05
Flash106 hat folgendes geschrieben: | oh man sorry... ich merk schon .. is wohl zu hoch für mich... kann mich wohl nicht ausdrücken.. .. also das letzte was gepostet wurde versuche ich nochmal... danke.. |
Nicht aufgeben!
Ich will Dich auch nicht nerven - wenn man das Prinzip einmal verstanden hat kann OOP auch richtig Spaß machen 
|
|