AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Einer query zusätzliche Felder hinzufügen und als CheckBox editieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einer query zusätzliche Felder hinzufügen und als CheckBox editieren

Ein Thema von baurat · begonnen am 23. Okt 2011 · letzter Beitrag vom 2. Nov 2011
Antwort Antwort
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#1

AW: Einer query zusätzliche Felder hinzufügen und als CheckBox editieren

  Alt 24. Okt 2011, 22:39
..Ernüchterung

1) @SX2008: JvMemoryTable... Sollte doch eigenltich nicht so schwer sein. Ich gebe als Dataset meine Datenquery an und nutze "Borrow Structure", um die Struktur zu importieren - damit hab ich alle Felder in der memTable. Interessanterweise sind manche auf readonly = true gesetzt, manche nicht, ebenso manche mit required= true bzw. false.
Wenn ich aber die Daten holen will (egal ob in der IDE oder per LoadFromDataSet(meineSQLQuery, meineSQLQuery.RecordCount, lmCopy, true)), passiert... immer wieder ein Fehler "Feld_xxx darf nicht leer sein!". In meineSQLQuery steht was drin, daran liegts nicht. Seltsam.

Wie bekommst du die Daten in die memTable?

2) @ Bummi: Ich muss gestehen: meine aktive Delphi-Zeit ist lange her. Bin mir deswegen nicht ganz sicher ob ich deine Zeilen richtig eingebaut hab.
In meinem main-form steht jetzt also ganz oben gleich nach der uses-Klauses die Type-Def. für TMyFieldDef. In die Public-Deklaration von Tf_main hab ich dann die Signatur der GetClientDSForDS Methode rein, den Quelltext dann natürlich in die Implementation.

Das wird compiliert, nur... wie wende ich es an?
Ich muss mir ja erst dieses Definitionen-Array basteln. Hast du da evtl. noch nen Code-Schnipsel?
Ich brauch ja einfach nur drei Felder: schuelerid (ftInteger), kursid (ftInteger), schuelername (ftString). Die Daten hierfür liegen in meineSQLQuery. Die Methode liefert mir theoretisch die Daten aus meineSQLQuery in einem clientDataSet zurück. Aber leider krachts auch hier - genau der gleiche Fehler wie oben!?!?!

Sobald ich die MemoryTable auf active=true setze bzw. GetClientDSForDS aufrufe, stolpert er und sagt "Feldxxx darf nicht leer sein" - das ist das erste Feld von meineSQLQuery.

Irgendwelche Ideen...?

Mannmannmann warum muss das alles so schwer sein...
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Einer query zusätzliche Felder hinzufügen und als CheckBox editieren

  Alt 24. Okt 2011, 23:03
Ich hätte es nicht in die Klasse eingebaut, sondern gegf. in eine Tools-Unit.
Das mit dem Recordarray ist nicht kompliziert
Delphi-Quellcode:
var
  RA:TFieldDefArray;
begin
SetLength(RA,2);
RA[0].Name := 'Feldx';
RA[0].Datatype := ftString;
RA[0].Size := 20;

RA[1].Name := 'Feldy';
RA[1].Datatype := ftboolean;
RA[1].Size := 0;


//Wenn Du nichts einfügen willst
SetLength(RA,0);
Wenn Du die Felder per SQL schon drin hast kannst Du ein leeres FieldDefArray mitgeben.

Der Fehler "Feldxxx darf nicht leer sein" scheint schon beim alleinigen lesenden Zugriff auf den Dataset aufzutreten das Clientdataset hat ja keine derartigen Einschränkungen zugewiesen bekommen, mit Zeos und MySQL bin ich allerdings nicht bewandert ...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#3

AW: Einer query zusätzliche Felder hinzufügen und als CheckBox editieren

  Alt 27. Okt 2011, 20:15
Tataaaa!

Dank Bummis Hilfe hab ich's mit seiner Möglichkeit über ein ClientDataSet hinbekommen.
Hatte ja eh eine Tools-Unit, da war das gut aufgehoben (uses-Klausel anpassen wg. DataSet).

Da ich MySQL verwende muss ich die boolean-Felder manuell hinzufügen (mysql ersetzt boolean durch tinyint, dann klappt das mit dem SMDB-Grid nicht automatisch mit den Checkboxen).

Kleines Kosmetikproblem: ich bekomme aus meiner Query noch einige andere Felder, für die "Absenzeingabe" will ich aber nur den Namen + die Checkboxfelder anzeigen, deswegen muss ich zur Laufzeit alle anderen unsichtbar setzen (schöner wärs die Eigenschaften alle schon zur Entwurfszeit festlegen zu können). Aber egal, alles kein großes Problem jetzt!

Nochmals vielen Dank für eure Hilfe, Problem gelöst )
  Mit Zitat antworten Zitat
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#4

AW: Einer query zusätzliche Felder hinzufügen und als CheckBox editieren

  Alt 27. Okt 2011, 22:42
Kleine Nachfrage: weiß jemand, wie ich alle Felder einer Spalte bearbeiten kann?

Hintergrund: ein Kurs findet normalerweise z.B. 4mal pro Woche statt, dh. ich erzeuge 4 Checkbox-Spalten. Es kann aber z.B. sind dass es in der aktuellen Woche nur 2 Termine gibt - da ich auch "Fehlanzeige" speichern möchte, darf ich also nicht blind durch alle Spalten gehen, sondern muss es ermöglichen, dass man z.B. Spalte 3 und 4 disabled.

Bearbeiten kann ich mit column.readonly := true blocken, das geht locker.
Aber nun möcht ich noch, dass alle evtl gesetzen Haken dieser Spalte wieder gelöscht (dh. auf feld.asboolean := false und zudem idealerweise die ganze Spalte angegraut wird. Das könnte schön über OnTitleClick erfolgen, dachte ich.

Also in der Art:
Delphi-Quellcode:
procedure TmeinForm.smdb_KursabsenzenTitleClick(Column: TColumn);
  if Column.ReadOnly = false then begin
    //UncheckAll(smdb_Kursabsenzen, Column); <- Versuch, klappt aber nicht
    Column.ReadOnly := true;
    Column.Color := clblue;
  end else begin
    Column.ReadOnly := false;
    Column.Color := clwhite;
  end;
Leider klappt auch das Setzen der Farben nicht.

Hat jemand dazu vielleicht nen Hinweis...?

Danke!


Ich w

Geändert von mkinzler (29. Okt 2011 um 13:01 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#5

AW: Einer query zusätzliche Felder hinzufügen und als CheckBox editieren

  Alt 29. Okt 2011, 00:53
Kommando leider doch nochmal zurück. An sich klappt alles, nur werden offenbar alle integer-Felder nicht kopiert - lass ich mir den Inhalt des originalen DataSets anzeigen, stehen die schuerlerids schön als int drin. Nach dem Kopieren in das ClientDataSet sind alle Spalten identisch, nur die int-Werte der schuelerids sind jetzt leer!

Ist leider doof, ich brauch die Schülerids natürlich, um die Fehlzeiten zuordnen zu können

Bummi, hast du eine Idee woran das liegen könnte?

Etwas verzweifelnde Grüße
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Einer query zusätzliche Felder hinzufügen und als CheckBox editieren

  Alt 29. Okt 2011, 10:33
Mhhh, nicht auf Anhieb, hast Du mal debugt nach TFieldType des Feldes ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
baurat

Registriert seit: 20. Jan 2007
34 Beiträge
 
#7

AW: Einer query zusätzliche Felder hinzufügen und als CheckBox editieren

  Alt 29. Okt 2011, 22:26
Mhhh, nicht auf Anhieb, hast Du mal debugt nach TFieldType des Feldes ....
In die Richtung hab ich auch schon überlegt. Das Feld schuelerid hat ja auch schon vorher beim "Import" in die MemTable für Probleme gesort, das hat sicher die gleiche Ursache.
Dachte vielleicht, dass das an einem Spezialfeldtyp von den Zeos-Komponenten liegt, dass die da irgendwas tricksen was nicht Standard ist - dem ist aber leider nicht so, die persistenten Felder in der mysql-Query sind alle die Felder aus der DB-Unit (schuelerid ist TLargeIntField).

Debuggen: Hm. In der NoAutoInc wird schuelerid as ftLargeInt richtigerweise erkannt. Warum klappts nicht? Wenn ich in NoAutoInc ftLargeInt als ftInteger erzeuge, funktionierts!?!?

Verstehe ich nicht

Naja, mal sehen obs noch weitere Schwierigkeiten damit gibt...
Auf jeden Fall nochmal Danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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 by Thomas Breitkreuz