AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi sql-update ... komisch komisch ...
Thema durchsuchen
Ansicht
Themen-Optionen

sql-update ... komisch komisch ...

Ein Thema von markon · begonnen am 2. Dez 2003 · letzter Beitrag vom 3. Dez 2003
Antwort Antwort
markon

Registriert seit: 12. Sep 2003
229 Beiträge
 
#1

sql-update ... komisch komisch ...

  Alt 2. Dez 2003, 14:02
hallo.
habe ein kleine datenbank.
eine tabelle besteht aus 10 spalten mit 4 datensätzen.

die erste spalte ist die "ID".
in meinem beispiel 1,2,3,4.
jetzt füge ich einen neuen datensatz ein mit "id" = 0.

anschließend verwende ich den sql-befehl: ADOQuery_FP.SQL.Add('update FP set fp_id = fp_id + 1');

was ist daran falsch, bzw, warum meckert mich das programm da an
es kommt ne fehlermeldung, damit der sql-befehl nicht ausgeführt werden kann, weil es dann zu doppeleinträgen kommt. kann doch nich sein. aus 0 wird 1, aus 1 wird 2, usw...

thx 4 help
marcus
  Mit Zitat antworten Zitat
Blechwolf

Registriert seit: 9. Sep 2003
Ort: Aachen
126 Beiträge
 
Delphi 7 Professional
 
#2

Re: sql-update ... komisch komisch ...

  Alt 2. Dez 2003, 17:00
Zitat von markon:
weil es dann zu doppeleinträgen kommt. kann doch nich sein. aus 0 wird 1, aus 1 wird 2, usw...
Salut,

rein aus der Theorie hast Du schon recht. Also aus 0 wird 1 und aus 1 wird 2, usw.
Ich glaube (sicher bin ich mir auch nicht, aber das wäre mein Lösungsansatz), da SQL die Daten Zeilenweise abarbeitet, sieht das ganze quasi so aus:

0 xyz abc def
1 zyx cba fed
2 yxz bca efd
....

nach dem ersten Aufruf Deiner Update funktion würde das ganze dann folgendermaßen aussehen:

1 xyz abc def
1 zyx cba fed
2 yxz bca efd
....

und damit hast Du zwei Datensätze mit dem Index 1.
Ich weiß zwar nicht genau ob und wie das funktioniert, aber Du müßtest quasi zuerst den letzten Index um 1 vergrößern, und Dich dann von hinten nach vorne durch arbeiten, bevor Du den neuen Datensatz einfügst.

Die andere Möglichkeit (falls Du was am Table-Desgin ändern kannst) wäre einen zweiten Index einzuführen.
Einen Primary Key, der von der Datenbank automatisch verwaltet wird, und einen Secondary Key, um den Du Dich im Programm kümmerst.

Grüße

Wolf
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (engl. Sprichwort)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: sql-update ... komisch komisch ...

  Alt 2. Dez 2003, 20:57
Hallo Markon,

Blechwolf dürfte recht haben: Ich setze so etwas auch ein, allerdings nicht für den Index. Das geht problemlos.

Stahli
  Mit Zitat antworten Zitat
markon

Registriert seit: 12. Sep 2003
229 Beiträge
 
#4

Re: sql-update ... komisch komisch ...

  Alt 3. Dez 2003, 11:19
danke für eure hilfe.
@ blechwolf
du hast recht mit deiner theorie. das stimmt so.
das mit den letzten index erhöhen hab ich nun ausprobiert und funzt. gab aber zwischendurch kleine ungereimtheiten.
hier ist mal der code:
Delphi-Quellcode:
if rb_fp_anfang.Checked=true
   then begin
        {----- Datensatz an erster Stelle einfügen -----}
         {der kampf mit dem index dauert fast einen geschlagenen tag, doch dann war ich
        doch siegreich..
        - kein index darf doppelt vorkommen -> sonst crash mit datenbank-regeln..
        - erst wird der neue index mit 0 gefüllt, die anderen sind ja von 1 aufwärts..
        - jetzt ganz normal den neuen datensatz erzeugen
        - nach erzeugen, alle indexe um 1 erhöhen (aus 1 wird 2, und aus der 0 wird 1)
           (wobei jeder erhöhte index gleich abgespeichert werden muss "nbpost"}


          {erst index auf 0, später dann +1}
           dbe_FP_ID.Text:='0';

          DBNavigator.BtnClick(nbpost);

         {tabelle neu sortieren damit die indexreihenfolge passt}
          DM_SIML.ADOQuery_FP.SQL.Clear;
          DM_SIML.ADOQuery_FP.SQL.Add('select * from FP order by fp_id desc');
          DM_SIML.ADOQuery_FP.Active:=true;
          DM_SIML.ADOTable_FP.Active:=True;

         {werte in db ändern, um 1 addieren}
          for i:=1 to DM_SIML.ADOQuery_FP.RecordCount do
           begin
            DM_SIML.ADOQuery_FP.RecNo:=i;
           //memo1.Lines.add('recno: '+inttostr(DM_SIML.ADOQuery_FP.RecNo));
            DBNavigator.BtnClick(nbedit); //editmodus
            DM_SIML.adoquery_FP.FieldByName('FP_ID').AsInteger :=
                                   DM_SIML.adoquery_FP.FieldByName('FP_ID').AsInteger + 1;

           {jeder einzelne datensatz muss gleich abgespeichert werden um crash zu vermeiden}
            DBNavigator.BtnClick(nbpost);

           end;
        end{end-if-anfang}
was sagt ihr zu der lösung ist sie zu umständlich aber für mein problem die lösug
(bei vielen datensätzen dauert das ganze ein bischen, da jeder satz gespeichert werden muss)
  Mit Zitat antworten Zitat
Blechwolf

Registriert seit: 9. Sep 2003
Ort: Aachen
126 Beiträge
 
Delphi 7 Professional
 
#5

Re: sql-update ... komisch komisch ...

  Alt 3. Dez 2003, 13:47
Salut,

freut mich, daß ich Dir helfen konnte. Waren meine DB-Vorlesungen doch zu was gut *fg*
Ich würde evtl. die Schleife umgekehrt laufen lassen:

Delphi-Quellcode:
for i:= DM_SIML.ADOQuery_FP.RecordCount downto 1 do
  begin
    {...schnipp...}
  end;
Damit dürfte das "Post" für jeden Datensatz wegfallen, und durch ein finales Post ersetzt werden können.
Denn so ein "Post" pro Datensatz verursacht jede Menge traffic, und macht das somit langsamer.
Allerdings könntest Du dann evtl. (je nach DB) Probleme mit "Concurrence" (wie heißt das gleichzeitige Ausführen von DB-Anfragen/Edits auf deutsch ?) bekommen...
Aber das sollte eigentlich ein Problem der DB-Entwickler sein, und nicht der DB-Anwender.

Grüße

Wolf
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (engl. Sprichwort)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: sql-update ... komisch komisch ...

  Alt 3. Dez 2003, 14:10
Warum fänsgt Du ned gleich an, den ersten Datensatz die ID 1 zu geben ? Dann sparst Du Dir das durchlaufen und updaten...
Was für eine DB liegt dahginter ? Vielleicht kannst Du 'nen Trigger verwenden, um Die ID's herauszufinden, dazu vielleicht ein AutoInc-Feld oder Generator.
Und Du brauchst bestimmt keine Klicks auf Navigator-Buttons zu emulieren, man kann auch bestimmt über die ADO-comp ein Edit/Post schicken...

MyRealName
  Mit Zitat antworten Zitat
markon

Registriert seit: 12. Sep 2003
229 Beiträge
 
#7

Re: sql-update ... komisch komisch ...

  Alt 3. Dez 2003, 15:51
hmm, das wäre schon besser wenn man es über ne adokomponente machen könnte. im moment weiß ich nicht wie.
es wird eine access-db verwendet.
für mein programm ist es genge, den mausklick zu simulieren. jedoch bei einer großen anzahl an datensätzen benötigt es schon eine gewisse zeit.
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
675 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: sql-update ... komisch komisch ...

  Alt 3. Dez 2003, 16:17
versuch doch mal ADOQuery.Post... sollte gehen
  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 07:44 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