Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-String zu lang ? (https://www.delphipraxis.net/109123-sql-string-zu-lang.html)

Smiley 24. Feb 2008 21:50

Datenbank: Access • Zugriff über: ADO

SQL-String zu lang ?
 
Ich habe einen sehr langen SQL-String, wegen den vielen Feldern, die ich zweimal aufzählen muss.
Gibt es bei der länge des SQL-Textes Probleme ?
Folgender Befehl bringt die Fehlermeldung "Syntaxfehler in der Insert Into-Anweisung".
Wenn ich weniger Felder nehme funktioniert die Anweisung.

Delphi-Quellcode:
  DM.QKat.SQL.text := 'Insert Into Kataloge (PreisDatum,NeuPreisDM,PreisEuro,Kaufdatum,Bildbeschreibung,' +
    'Spur,alteNr,Hersteller,VerpEinh,AbrechnungsEinheit,Land,Artikel,Achsen,WagenTyp,Masse,FahrzeugNr,' +
    'HerkunftFzNr,Verwaltung,System,Epoche,Farbe,Beschriftung,Kupplung,Licht,Raeder,Extras,Zusatz,Ausfuehrung,';
   DM.QKat.SQL.Add(
    'Bildrecht,BaujahrVon,BaujahrBis,Gehaeuse,Fahrgestell,PreisFirma,PreisHerkunft,Limitiert,Quelle,KatDatum,' +
    'Seite,Faktor,Lagermenge,Packung,ohne,Zustand,Erfasst,Fach,Herkunft,Ort,Gluehbirne,Haftstreifen,');
   DM.QKat.SQL.Add(
    'Buegelkupplung,Kupplung-v,Hakenkupplung,Kurzkupplung,Motor,ATMotor,Buersten,Umschalter,Zahnrad1,' +
    'Zahnrad2,Stomabnehmer,Schleifer,Drehgestell,Innenbeleuchtung,GS-Achse,WS-Achse,NEM-Radsatz,RP25-Radsatz,' +
    'Puffer,Zuruestteile,Digital-Decoder)');
   DM.QKat.SQL.Add(
    ' Select PreisDatum,NeuPreisDM,PreisEuro,Kaufdatum,Bildbeschreibung,Spur,alteNr,Hersteller,VerpEinh,' +
    'AbrechnungsEinheit,Land,Artikel,Achsen,WagenTyp,Masse,FahrzeugNr' +
    'HerkunftFzNr,Verwaltung,System,Epoche,Farbe,Beschriftung,Kupplung,Licht,Raeder,Extras,Zusatz,Ausfuehrung,');
   DM.QKat.SQL.Add(
    'Bildrecht,BaujahrVon,BaujahrBis,Gehaeuse,Fahrgestell,PreisFirma,PreisHerkunft,Limitiert,Quelle,KatDatum,' +
    'Seite,Faktor,Lagermenge,Packung,ohne,Zustand,Erfasst,Fach,Herkunft,Ort,Gluehbirne,Haftstreifen,');
   DM.QKat.SQL.Add(
    'Buegelkupplung,Kupplung-v,Hakenkupplung,Kurzkupplung,Motor,ATMotor,Buersten,Umschalter,Zahnrad1,' +
    'Zahnrad2,Stomabnehmer,Schleifer,Drehgestell,Innenbeleuchtung,GS-Achse,WS-Achse,NEM-Radsatz,RP25-Radsatz,' +
    'Puffer,Zuruestteile,Digital-Decoder)' +
    ' From Kataloge' +
    ' Where BestellNr=' + QuotedStr(AktBestNr));

  DM.QKat.ExecSQL;

GuenterS 24. Feb 2008 21:55

Re: SQL-String zu lang ?
 
Zitat:

'AbrechnungsEinheit,Land,Artikel,Achsen,WagenTyp,M asse,FahrzeugNr' +
'HerkunftFzNr,Verwaltung,Sy

da fehlt das ","

omata 24. Feb 2008 22:02

Re: SQL-String zu lang ?
 
Rücke deinen Quellcode mal ordentlich und konsequent ein, dann würdest du auch die eigentlichen Fehler sehen...

Delphi-Quellcode:
DM.QKat.SQL.text :=
  'INSERT INTO Kataloge (PreisDatum, NeuPreisDM, PreisEuro, Kaufdatum, Bildbeschreibung, ' +
  '                     Spur, alteNr, Hersteller, VerpEinh, AbrechnungsEinheit, Land, ' +
  '                     Artikel, Achsen, WagenTyp, Masse, FahrzeugNr, HerkunftFzNr, ' +
  '                     Verwaltung, System, Epoche, Farbe, Beschriftung, Kupplung, Licht, ' +
  '                     Raeder, Extras, Zusatz, Ausfuehrung, Bildrecht, BaujahrVon, BaujahrBis, ' +
  '                     Gehaeuse, Fahrgestell, PreisFirma, PreisHerkunft, Limitiert, Quelle, KatDatum, ' +
  '                     Seite, Faktor, Lagermenge, Packung, ohne, Zustand, Erfasst, Fach, Herkunft, ' +
  '                     Ort, Gluehbirne, Haftstreifen, Buegelkupplung, Kupplung-v, Hakenkupplung, ' +
  '                     Kurzkupplung, Motor, ATMotor, Buersten, Umschalter, Zahnrad1, Zahnrad2, ' +
  '                     Stomabnehmer, Schleifer, Drehgestell, Innenbeleuchtung, GS-Achse, WS-Achse, ' +
  '                     NEM-Radsatz, RP25-Radsatz, Puffer, Zuruestteile, Digital-Decoder) ' +
  'SELECT PreisDatum, NeuPreisDM, PreisEuro, Kaufdatum, Bildbeschreibung, ' +
  '      Spur, alteNr, Hersteller, VerpEinh, AbrechnungsEinheit, Land, ' +
  '      Artikel, Achsen, WagenTyp, Masse, FahrzeugNr, HerkunftFzNr, ' +
  '      Verwaltung, System, Epoche, Farbe, Beschriftung, Kupplung, Licht, ' +
  '      Raeder, Extras, Zusatz, Ausfuehrung, Bildrecht, BaujahrVon, BaujahrBis, ' +
  '      Gehaeuse, Fahrgestell, PreisFirma, PreisHerkunft, Limitiert, Quelle, KatDatum, ' +
  '      Seite, Faktor, Lagermenge, Packung, ohne, Zustand, Erfasst, Fach, Herkunft, ' +
  '      Ort, Gluehbirne, Haftstreifen, Buegelkupplung, Kupplung-v, Hakenkupplung, ' +
  '      Kurzkupplung, Motor, ATMotor, Buersten, Umschalter, Zahnrad1, Zahnrad2, ' +
  '      Stomabnehmer, Schleifer, Drehgestell, Innenbeleuchtung, GS-Achse, WS-Achse, ' +
  '      NEM-Radsatz, RP25-Radsatz, Puffer, Zuruestteile, Digital-Decoder ' +
  'FROM Kataloge' +
  'WHERE BestellNr = ' + QuotedStr(AktBestNr);

DM.QKat.ExecSQL;
Edit:
Zitat:

Zitat von Smiley
Delphi-Quellcode:
...Zuruestteile,Digital-Decoder)...

Das Komma ist nur einer der Fehler...

Gruss
Thorsten

Smiley 24. Feb 2008 22:19

Re: SQL-String zu lang ?
 
Tut mir leid, dass da soviel Text und so wenig geordnet ist.
Die zwei Fehler habe ich auch gerade gefunden.
Es muss aber noch was drin sein.
Es ging mir vorrangig erst mal darum zu wissen, ob der SQL-Text nicht auf 255 Zeichen oder was anderes begrenzt ist
und ob die CR/LF Zeichen die durch das SQL.ADD mit reinkommen, da auch nicht stören.
Dürfen "-" Zeichen in den Feldnamen drin sein?

Ich werde das ganze noch mal weiter formatieren, dann finde ich den Fehler wohl schon noch.

omata 24. Feb 2008 22:21

Re: SQL-String zu lang ?
 
Also ich würde in einem Spaltenname niemals ein Minuszeichen einbauen. Wenns unbedingt sein muss dann lieber einen Unterstrich. Aber vielleicht hilft es ja diese Spaltennamen in eckige Klammern zu setzen.

Edit: Hab noch einen Fehler gefunden...
Delphi-Quellcode:
DM.QKat.SQL.text :=
  'INSERT INTO Kataloge (PreisDatum, NeuPreisDM, PreisEuro, Kaufdatum, Bildbeschreibung, ' +
  '                     Spur, alteNr, Hersteller, VerpEinh, AbrechnungsEinheit, Land, ' +
  '                     Artikel, Achsen, WagenTyp, Masse, FahrzeugNr, HerkunftFzNr, ' +
  '                     Verwaltung, System, Epoche, Farbe, Beschriftung, Kupplung, Licht, ' +
  '                     Raeder, Extras, Zusatz, Ausfuehrung, Bildrecht, BaujahrVon, BaujahrBis, ' +
  '                     Gehaeuse, Fahrgestell, PreisFirma, PreisHerkunft, Limitiert, Quelle, KatDatum, ' +
  '                     Seite, Faktor, Lagermenge, Packung, ohne, Zustand, Erfasst, Fach, Herkunft, ' +
  '                     Ort, Gluehbirne, Haftstreifen, Buegelkupplung, Kupplung-v, Hakenkupplung, ' +
  '                     Kurzkupplung, Motor, ATMotor, Buersten, Umschalter, Zahnrad1, Zahnrad2, ' +
  '                     Stomabnehmer, Schleifer, Drehgestell, Innenbeleuchtung, GS-Achse, WS-Achse, ' +
  '                     NEM-Radsatz, RP25-Radsatz, Puffer, Zuruestteile, Digital-Decoder) ' +
  'SELECT PreisDatum, NeuPreisDM, PreisEuro, Kaufdatum, Bildbeschreibung, ' +
  '      Spur, alteNr, Hersteller, VerpEinh, AbrechnungsEinheit, Land, ' +
  '      Artikel, Achsen, WagenTyp, Masse, FahrzeugNr, HerkunftFzNr, ' +
  '      Verwaltung, System, Epoche, Farbe, Beschriftung, Kupplung, Licht, ' +
  '      Raeder, Extras, Zusatz, Ausfuehrung, Bildrecht, BaujahrVon, BaujahrBis, ' +
  '      Gehaeuse, Fahrgestell, PreisFirma, PreisHerkunft, Limitiert, Quelle, KatDatum, ' +
  '      Seite, Faktor, Lagermenge, Packung, ohne, Zustand, Erfasst, Fach, Herkunft, ' +
  '      Ort, Gluehbirne, Haftstreifen, Buegelkupplung, Kupplung-v, Hakenkupplung, ' +
  '      Kurzkupplung, Motor, ATMotor, Buersten, Umschalter, Zahnrad1, Zahnrad2, ' +
  '      Stomabnehmer, Schleifer, Drehgestell, Innenbeleuchtung, GS-Achse, WS-Achse, ' +
  '      NEM-Radsatz, RP25-Radsatz, Puffer, Zuruestteile, Digital-Decoder ' +
  'FROM Kataloge ' +
  'WHERE BestellNr = ' + QuotedStr(AktBestNr);

DM.QKat.ExecSQL;
Gruss
Thorsten

Smiley 24. Feb 2008 22:31

Re: SQL-String zu lang ?
 
Meintest Du den Fehler des fehlenden Leerzeichens bei Kataloge am ende ? (Das wars nicht, hab ich gleich probiert)
Sonst hab ich noch nichts neues entdeckt.

Meinst Du mit "Spaltennamen in Eckige Klammern setzen", die kritischen Namen oder alle ?

omata 24. Feb 2008 22:37

Re: SQL-String zu lang ?
 
Ja das Leerzeichen meinte ich.
Ja nur die Spaltennamen, die ein Minuszeichen enthalten.

Edit: Ist der Spaltenname (Stomabnehmer) richtig? Oder soll das vielleicht Stromabnehmer heissen?

Gruss
Thorsten

Smiley 24. Feb 2008 22:42

Re: SQL-String zu lang ?
 
Ja, es sind tatsächlich die Spalten mit dem minuszeichen drin (z.B. Kupplung-v,).
Ich werde das mit den eckigen Klammern jetzt mal versuchen.

Smiley 24. Feb 2008 22:51

Re: SQL-String zu lang ?
 
Ja, richtig Thorsten (Luchsauge), das mit dem St(r)omabnehmer habe ich glatt übersehen.

Jetzt funktioniert es.

Vielen Dank für Eure Hilfe, das war sehr nett von Euch bei diesem dicken Wust an Feldern.

Hansa 24. Feb 2008 23:21

Re: SQL-String zu lang ?
 
Ist das da dein Ernst ? :shock: Jo, der Name Smiley passt. :lol:

Ich würde mal nach ParamByName -> F1 suchen ! Da dies wohl nicht geht, sonst wäre die Frage überflüssig : die SQL-Statements sind TStrings, insofern steht Add, Clear usw. zur Verfügung. Wieso steht der ganze Kram eigentlich im Programm drin ? Das gehört als grundlegende Eigenschaft in das Dataset -> SQL-Generator etc.

Smiley 24. Feb 2008 23:52

Re: SQL-String zu lang ?
 
Was wollen uns diese Wore sagen ???
Erinnert mich irgendwie an Drachensprache.

omata 24. Feb 2008 23:54

Re: SQL-String zu lang ?
 
Oh, da kann man ja gratulieren.
Herzlichen Glückwunsch zum runden Geburtstag :cheer:

Viele Grüsse
Thorsten

Hansa 25. Feb 2008 00:03

Re: SQL-String zu lang ?
 
So ein Zufall. Glückwunsch, 50 Jahre überstanden. :mrgreen: Du bist somit viel älter als Access oder BDE. Rest steht im Beitrag. :lol:

sx2008 25. Feb 2008 06:27

Re: SQL-String zu lang ?
 
Eine Monster SQL-Anweisung. Da muss eigentlich eine Stimme sagen "da stimmt was am Design nicht".
Ich würde ein Grossteil der Felder in einer weiteren Tabelle abspeichern.

ich muss jetzt etwas verallgemeinern...

Code:
Artikeltabelle
==============
IdArtikel | Bezeichnung | Preis | Hersteller | ...

Attribute
=========
IdAtribut | Name
        1 | Bildbeschreibung
        2 | Farbe
        3 | Baujahr von

ArtikelAttribute
================
IdArtikel | IdAttribut | Wert
-----------------------------
4711      | 2          | rot-grün
4711      | 1          | E-Lok 2000 auf Abstellgleis
4711      | 3          | 1956
Also es gibt eine Artikeltabelle (bei dir "Kataloge") in der sind nur die wichtigsten Felder.
JEDER Artikel hat eine Bezeichnung und einen Preis.
Aber nur ganz wenige Artikel haben einen Stromabnehmer !!!
Deshalb werden diese Info's in der Untertabelle "ArtikelAttribute" gespeichert.

marabu 25. Feb 2008 10:40

Re: SQL-String zu lang ?
 
Hallo Smiley,

auch von mir alles Gute zu deinem Geburtstag.

Und noch ein paar Anmerkungen zu diesem Thread: Für das Duplizieren eines einzigen Datensatzes ist SQL nicht erste Wahl, insbesondere wenn du den für den neuen Datensatz automatisch vergebenen Schlüssel benötigst. Was deine Datenmodellierung angeht, so hoffe ich einfach mal, dass dir jemand zum Geburtstag ein gutes Buch zu diesem Thema geschenkt hat.

Delphi-Quellcode:
function DuplicateRecord(
    ds: TCustomADODataSet;
    pkName: string;
    pkValue: Variant;          // null means current record
    fieldNames: TStrings = nil // nil means no field restrictions
): Variant;
var
  dsClone: TADODataSet;
  f: TFields;
  i: Integer;
begin
  if not ds.IsEmpty
  and ((pkValue = null) or ds.Locate(pkName, pkValue, [])) then
  begin
    dsClone := TADODataSet.Create(ds.Owner);
    dsClone.Clone(ds);
    f := ds.Fields;
    ds.DisableControls;
    try
      ds.Insert;
      for i := 0 to Pred(ds.FieldCount) do
        if not SameText(f[i].FieldName, pkName)
        and (not Assigned(fieldNames) or (fieldNames.IndexOf(f[i].FieldName) >= 0)) then
          f[i].Value := dsClone.FieldByName(f[i].FieldName).Value;
      ds.Post;
      Result := ds.FieldByName(pkName).Value;
    finally
      ds.EnableControls;
      dsClone.Free;
    end;
  end else Result := null;
end;
Freundliche Grüße

Smiley 25. Feb 2008 13:26

Re: SQL-String zu lang ?
 
Vielen Dank für die Geburtstagsgrüße.

Dass diese Methode noch nicht optimal ist dachte ich mir schon, aber das war bisher das beste Ergebnis aus meiner Anfrage im letzten Thread
siehe Hier im Forum suchenADO Daten in gleicher Tabelle kopieren.

@SX2008
Du meinst, dass ich die Daten als Detailtabelle ablegen soll, das macht aber keinen Sinn, da Ein Datensatz alle diese Felder enthält und nicht nur einige.
Bei größeren Projekten ist es doch normal, dass ein Datensatz auch mal viele Felder enthalten kann.
Die Methode mit dem Insert Into war die beste (einzige) die mir bisher angeboten wurde.

@marabu
Dass Du wieder mal die perfekte Lösung aus dem Ärmel schüttelst war ja klar. (Immer diese Profis)
Danach hatte ich ja in dem anderen Thread gefragt, eine Lösung bei der ich die Felder in einer Schleife abfrage und kopiere.
Kann es sein, dass der Clone-Befehl eine spezielle Funktion von Access oder ADO ist?
Danke für diesen Tip, Deine Ratschläge sind immer wieder grandios.

@Hansa
Meine Anwendung ist eine Einzelplatzlösung, ich glaube nicht, dass dort eine StoredProcedure benötigt wird, besonders wenn es nur ein einmaliger Forgang ist, die daten einzulesen.

Es geht mir hierbei nicht um die Lösung speziell dieses Problemes sondern prinzipiell darum wie man es am besten machen kann und welche verschiedenen Möglichkeiten es dafür gibt.
Ich will das dann ja auf andere Projekte auch wieder anwenden können.
Im Moment arbeite ich erst mal an kleinen Projekten mit einem bis drei Benutzern.
Wenn ich die Grundlagen besser drauf habe, dann kann ich mich auch tiefer in die SQL-Client-Server Technik und Optimierung einarbeiten.

Mein Hauptproblem wodurch dies hier alles erst entstanden ist, ist aber viel schlimmer.
Das alles ist eine ungünstige Lösung für folgendes Problem:
Ein Formular mit 60 Datenbank-Feldern, davon 38 DBComboboxen. (schlimm genug)
Alle Daten sollen in einer Access Datenbank verwaltet werden, also auch die Daten der DBComboBoxen.
Daher hab ich für jede DBComboBox eine Tabelle angelegt.
Dies ist keine sehr tolle Lösung, ging aber schnell und es wird alles automatisch verwaltet.
Man könnte jetzt alle Comboboxinhalte in eine Tabelle legen mit dem comboboxnamen dabei, dann muss ich aber jede Combobox einzeln füllen,
das finde ich nicht lustig, es sei denn ich kann es mit einer ebenso genialen Technik machen wie marabu sie hier mit dem Datenkopieren gemacht hat.
Also alle Comboboxen suche, alle inhalte pro combobox aus tabelle lesen und damit die Combobox füllen.
Das ganze im Formcreate vom Hauptformular.
Ist diese Lösung vernüftig, oder gibt es noch was besseres ?

Hansa 25. Feb 2008 13:32

Re: SQL-String zu lang ?
 
Ähmm, was haben Parameter mit SPs zu tun ? Nicht Ursache und Wirkung verwechseln ! Du schließt anscheinend daraus, dass es bei SPs Parameter gibt, darauf dass Parameter nur bei SPs vorkommen ? :gruebel: Die gibts auch bei einem normalen Select Statement. In Delphi also auch innerhalb des SelectSQL des Datasets, wie in deinem Source.

Edit : sehe gerade, dass Add schon verwendet wird. Omata hat das wieder zusammengebaut. Dann mache doch die Add-Zeilen etwas kürzer, wenn nicht sogar pro Feld ein Add.

omata 25. Feb 2008 14:03

Re: SQL-String zu lang ?
 
Nur nebenbei: ich hasse Add im Zusammenhang mit einer SQL-Anweisung.
Und wie immer der Hinweis: Nimm Append anstelle von Add!
Add = Funktion
Append = Prozedur

Gruss
Thorsten

Hansa 25. Feb 2008 16:16

Re: SQL-String zu lang ?
 
Er soll das schon so machen (siehe Delphi-Hilfe) :

Delphi-Quellcode:
var

  StringList: TStrings;
begin
  StringList := TStringList.Create;
  try
    with StringList do begin
      Add('This example uses A string List.');
      Add('It is the easiest way to add strings');
      Add('to a combobox''s list of strings.');
      Add('Always remember TStrings.Create method');
      Add('is abstract; So use TStringList.Create');
      Add('method instead.');
    end;
    with ComboBox1 do begin
      Width := 210;
      Items.Assign(StringList);
      ItemIndex := 0;
    end;
  finally
    StringList.free;
  end;
end;
Der Rückgabewert ist hier wohl uninteressant. Also ist in diesem Fall Append = Add.

Zitat:

Rufen Sie Add auf, wenn am Ende der Liste ein String hinzugefügt werden soll. Add gibt den Index des neuen Strings zurück.

omata 25. Feb 2008 16:54

Re: SQL-String zu lang ?
 
Das ist mir schon klar, das hier meine eigentliche Intention nicht verstanden wird. Also macht weiter mit euren Frikel-Lösungen

Gruss
Thorsten

Hansa 25. Feb 2008 18:38

Re: SQL-String zu lang ?
 
Wenn schon, dann heißt das "Frickel"-Lösung. :lol: :mrgreen: Ist es aber nicht. Siehe hier :

Delphi-Quellcode:
function TStrings.Add(const S: string): Integer;
begin
  Result := GetCount;
  Insert(Result, S);
end;

procedure TStrings.Append(const S: string);
begin
  Add(S);
end;
:shock: Und nu ? Jetzt kommst du. Das ist gereimt. :mrgreen:

omata 25. Feb 2008 18:48

Re: SQL-String zu lang ?
 
Da vertippt man sich mal, primitiver gehts ja wohl nicht.

Dieses Beispiel zeigst du mir jedes mal.

Hansa 25. Feb 2008 18:56

Re: SQL-String zu lang ?
 
Sorry, aber deine Intention verstehe ich immer noch nicht. Ja, was willst du uns denn sagen ? :mrgreen: Die paar Zeilen stammen übrigens aus der VCL und nicht von mir. Du machst mit dem append also tatsächlich nichts anderes als das "Frickel"-Add auszufüren, lediglich über einen Umweg. :zwinker: Sage doch einfach, dass es sich bei dem Append um einen Irrtum deinerseits handelt. :mrgreen:

marabu 25. Feb 2008 19:28

Re: SQL-String zu lang ?
 
Hallo Smiley,

Zitat:

Zitat von Smiley
... Man könnte jetzt alle Comboboxinhalte in eine Tabelle legen mit dem comboboxnamen dabei, dann muss ich aber jede Combobox einzeln füllen ...

wenn deine 38 DBComboBoxen nur zur Normalisierung der Feldwerte gedacht sind, dann würde ich das genau so machen. Ein Identity-Feld als PK, ein Diskriminator für den Feldnamen in der Tabelle KATALOGE und ein Feld zur Aufnahme der möglichen Werte für dieses Feld.

Das Befüllen der DBComboBox.Items wird nicht komplizierter, wenn du alle Feldwerte in einer einzigen Tabelle vorhältst. An Stelle des Öffnens jeder einzelnen der 38 Tabellen jetzt öffnest du dann nur noch eine Tabelle und über den Filter-Mechanismus selektierst du die relevanten Datensätze.

Eigentlich speichert man ja die Werte nicht direkt in der Tabelle KATALOGE, sondern verschlüsselt sie z.B. über eine DBLookupComboBox - um das Thema Datenmodellierung nochmal zu streifen.

Freundliche Grüße

omata 25. Feb 2008 20:41

Re: SQL-String zu lang ?
 
@Hansa: Meisterlampe, es handelt sich aber um keinen Irrtum PUNKT

Smiley 26. Feb 2008 11:25

Re: SQL-String zu lang ?
 
@marabu
Danke für den konstruktiven Kommentar.
Ich arbeite bereits mit DBLookupComboBoxen (hab mich im Namen verschrieben), jede ist mit jeweils einer eigenen Tabelle verbunden.
Die Tabellen der DBLookupComboboxen liegen natürlich nicht in der Tabelle Kataloge, wie sollte das gehen.
Von der Datenmodellierung ist es doch auch sinnvoller alle Combobox-Werte in einer Tabelle zu halten, wie vorgesehen, und nicht für jede Box eine eigene Tabelle anzulegen oder ?

marabu 26. Feb 2008 19:52

Re: SQL-String zu lang ?
 
Zitat:

Zitat von Smiley
... Von der Datenmodellierung ist es doch auch sinnvoller alle Combobox-Werte in einer Tabelle zu halten, wie vorgesehen, und nicht für jede Box eine eigene Tabelle anzulegen oder ?

Nur wegen dem Fragezeichen am Ende: Ja.

Smiley 27. Feb 2008 11:27

Re: SQL-String zu lang ?
 
@marabu
Noch ein paar Fragen zu Deiner Routine DuplicateRecord()

Die Abfrage if not ds.IsEmpty and ((pkValue = null) or ds.Locate(pkName, pkValue, [])) then

funktioniert aber doch nur dann, wenn ich in den Optionen die Auswertung der If Statments nicht auf vollständig stehen habe,
sonst würde doch der letzte Befehl (ds.Locate(pkName, pkValue, []) noch ausgeführt werden wenn ich in pkvalue null übergebe
und keine Werte in pkname und pkvalue eingetragen habe.
Sehe ich das so richtig ?

Ist der Befehl dsClone.Clone(ds); ein spezieller Access oder ADO Befehl oder gibt es clone auch allgemein ?

marabu 27. Feb 2008 11:51

Re: SQL-String zu lang ?
 
Das IF-Statement habe ich für die Standardeinstellung (Kurzschlussverfahren) geschrieben. Wenn du diese Einstellung (Direktive $B) nicht generell verwendest, dann kannst du das Statement lokal unter diese Direktive stellen.

Clone() ist eine ADO RecordSet-Methode.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 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