Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   "Feld xyz wurde nicht gefunden" (https://www.delphipraxis.net/152971-feld-xyz-wurde-nicht-gefunden.html)

Mysterio08 15. Jul 2010 08:16

Datenbank: MySql • Version: 5.1 • Zugriff über: ADO/OBDC

"Feld xyz wurde nicht gefunden"
 
Hallo,

ich möchte in meiner Datenbankanwendung gerne Memo-Felder im DBGrid anzeigen lassen. Dafür habe ich bei meiner TAdoQuery-Komponente die entsprechenden Felder hinzugefügt (per Rechtsklick auf die Komponente) und dann das OnGetText-Ereignis wie folgt ausgewertet (ein Ereignis für alle Memo-Felder):

Delphi-Quellcode:
procedure TForm1.OnGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
  //Dafür sorgen, dass auch die Memo-Felder im DBGrid angezeigt werden
  if Sender = AdoQuery1.FieldByName('HierarchischeEinordnung') then
    Text := Copy(AdoQuery1.FieldByName('HierarchischeEinordnung').AsString , 1, 50)
  else if Sender = AdoQuery1.FieldByName('Verantwortungsbereich') then
    Text := Copy(AdoQuery1.FieldByName('Verantwortungsbereich').AsString , 1, 50)
  //Es folgen noch weitere Felder
end;
Wenn ich alle diese Felder anzeige, gibt es kein Problem. Sobald ich jedoch eines weglasse, bekomme ich die Meldung á la: "Das Feld Verantwortungsbereich wurde nicht gefunden".
Wie kann ich den Fehler umgehen? Die Memo-Felder anders darstellen? Oder gibt es eine Eigenschaft von AdoQuery, mit der ich nach einem Feld fragen kann? Dass es so aussieht:
Delphi-Quellcode:
if Sender = AdoQuery1.FieldByName('HierarchischeEinordnung') then if AdoQuery1.Fields('HierarchischeEinordnung').Exists then Text := Copy(AdoQuery1.FieldByName('HierarchischeEinordnung').AsString , 1, 50)

mfg

hoika 15. Jul 2010 08:39

AW: "Feld xyz wurde nicht gefunden"
 
Hallo,

du hast wohl persistente Felder benutzt per Doppelklick auf die Query
(z.B. zum Einstellen der Breite/Formatierung).
Dann darfst du kein Feld weglassen.

Viell. kannst du ja per DB_XXX.Visible:=False die nicht benötigten Felder ausblenden.


Heiko

mkinzler 15. Jul 2010 08:41

AW: "Feld xyz wurde nicht gefunden"
 
Oder im Grid (Columeditor) einstellen, welche Felder du willst

Mysterio08 15. Jul 2010 09:06

AW: "Feld xyz wurde nicht gefunden"
 
Das ganze geschieht aber dynamisch, ich weiß also nicht, welche Felder der User auswählen wird - deshalb fällt das mit dem DBGrid-Columns weg.

Mit .Visible habe ich es noch nicht ausprobiert, das werde ich später mal tun!

mkinzler 15. Jul 2010 09:14

AW: "Feld xyz wurde nicht gefunden"
 
Die Columns kann man auch dynamisch erzeugen

Mysterio08 15. Jul 2010 11:44

AW: "Feld xyz wurde nicht gefunden"
 
Das mit dem Ausblenden von Spalten halte ich doch nicht für eine so gute Idee, weil es nicht besonders elegant ist.

Deswegen: Wie genau hast du es gemeint, mkinzler, mit dem Erstellen der Columns per Editor? Das löst ja noch nicht mein Problem, Memo-Felder im DBGrid anzeigen zu wollen (und nicht nur ein MEMO zu lesen)!

Hier habe ich noch einen anderen Ansatz gefunden, die Memo-Felder im DBGrid darstellen zu können. Nur was für Code muss in diesem OnDrawColumnCell-Ereignis stehen?

Mysterio08 16. Jul 2010 08:20

AW: "Feld xyz wurde nicht gefunden"
 
Gibt es denn noch eine Alternative, wie ich Memo-Felder im DBGrid anzeigen lassen kann?

shmia 16. Jul 2010 13:59

AW: "Feld xyz wurde nicht gefunden"
 
Delphi-Quellcode:
procedure TForm1.MemoOnGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
  //Dafür sorgen, dass auch die Memo-Felder im DBGrid angezeigt werden
  Text := Copy(Sender.AsString , 1, 50);
end;
Delphi-Quellcode:
procedure TForm1.TabelleXyAfterOpen(dataset:TDataset);
var
  i : integer;
begin
  // allen Memo-Feldern den neuen Event-Handler zuweisen
  for i := 0 to Dataset.Fields.Count-1 do
  begin
    if Dataset.Fields[i].DataType = ftMemo then
      Dataset.Fields[i].OnGetText := MemoOnGetText;
  end;
end;

Mysterio08 25. Jul 2010 09:44

AW: "Feld xyz wurde nicht gefunden"
 
Ich habe mich eben nochmal drangesetzt und versucht, das Problem zu lösen, habe es aber noch nicht geschafft.
Mit dem von dir geposteten Code, shmi bin ich schon ein wenig weitergekommen, aber es tritt immer noch derselbe Fehler auf.
Was meintest du mit "allen Memo-Feldern den neuen Event-Handler zuweisen"? Welchen Event-Handler? TabelleXyAfterOpen? Und wo soll ich den zuweisen, der wird mir bei den Memo-Felder bei keinem Ereignis angezeigt.

DeddyH 25. Jul 2010 10:15

AW: "Feld xyz wurde nicht gefunden"
 
MemoOnGetText ist der Handler, welcher im AfterOpen-Event der Tabelle zugewiesen wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz