AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL-String zu lang ?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL-String zu lang ?

Ein Thema von Smiley · begonnen am 24. Feb 2008 · letzter Beitrag vom 27. Feb 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 00:52
Was wollen uns diese Wore sagen ???
Erinnert mich irgendwie an Drachensprache.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 00:54
Oh, da kann man ja gratulieren.
Herzlichen Glückwunsch zum runden Geburtstag

Viele Grüsse
Thorsten
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 01:03
So ein Zufall. Glückwunsch, 50 Jahre überstanden. Du bist somit viel älter als Access oder BDE. Rest steht im Beitrag.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#14

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 07:27
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.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 11:40
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
  Mit Zitat antworten Zitat
Benutzerbild von Smiley
Smiley

Registriert seit: 9. Dez 2004
Ort: Gedern
205 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 14:26
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 ?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#17

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 14:32
Ä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 ? 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 15:03
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#19

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 17:16
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#20

Re: SQL-String zu lang ?

  Alt 25. Feb 2008, 17:54
Das ist mir schon klar, das hier meine eigentliche Intention nicht verstanden wird. Also macht weiter mit euren Frikel-Lösungen

Gruss
Thorsten
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:04 Uhr.
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