AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datensätze in die gleiche Tabelle kopieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Datensätze in die gleiche Tabelle kopieren?

Ein Thema von prelude247 · begonnen am 1. Aug 2005 · letzter Beitrag vom 17. Jan 2007
Antwort Antwort
Seite 2 von 3     12 3      
marabu

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

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 08:32
Guten Morgen,

auch LocalSQL unterstützt INSERT INTO SELECT. Offensichtlich erzeugst du einen Ausdruck vom falschen Typ. Fehler-Kandidaten sind Termin und Jahr, die du beide verändert übertragen möchtest. Jahr dürfte ein Integer-Feld sein, der korrekte Ausdruck ist dann JAHR + :iYears wobei iYears auch als Integer übergeben werden muss. Bei Termin lässt du mich raten. Als Date-Feld wäre der korrekte Ausdruck Termin + :iDays wobei iDays die Zahl der Tage ist, welche auf das Datum aufgerechnet werden soll. CAST() brauchst du hauptsächlich dann, wenn Typanpassungen für Zeichenverkettungen vornehmen musst oder zwischen Binär- und Texttypen hin und her wandeln musst.

Grüße vom marabu
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
376 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 14:42
@Marabu

... vielen Dank für die schnelle Antwort. Den Verdacht hatte ich auch schon. Deswegen die CAST's. Werde das nachher gleich ausprobieren. Termin ist übrigens DATETIME, wie du schon richtig vermutet hattest.

Werde das nachher gleich ausprobieren... nochmals Danke.
Andreas Schachtner
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
376 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 16:56
@marabu

... habe die Anweisungen folgendermaßen angepasst

Delphi-Quellcode:
var Diff : integer;
begin
 If SourceJahr<>TargetJahr then
  begin
   Diff:=TargetJahr-SourceJahr;
   DM.ProgressWork ('Temperaturen '+IntToStr(TargetJahr)+' einfügen',' ',' ',' ',0);
   with DM.Query_Betrieb4 do
    begin
     hs:='Insert Into Haustemperatur.db (Flaeche,Termin,Jahr,Temp_Tag,Temp_Nacht) ';
     hs:=hs+' Select Flaeche,Termin+:ZWert,Jahr+:Diff,Temp_Tag,Temp_Nacht from HausTemperatur.db where Jahr='+IntToStr(SourceJahr);
     SQL.Clear;
     SQL.Add (hs);
     ParamByName ('ZWert').asInteger:=Trunc(EncodeDate(TargetJahr+1,1,1)-EncodeDate(SourceJahr,1,1));
     ParamByName ('Diff').asInteger:=Diff;
     ExecSQL;
    end;
  end;
end;
...und jetzt bringt er mir den Fehler "Merkmal nicht verfügbar". Die Spaltenbezeichnungen sind alle richtig und auch keine AutoInc-Felder. Irgendwelche Ideen ???

nochmal kurz zur Tabellenstruktur..
Flaeche ist INTEGER / Termin ist DATE ===> beide Primärschlüssel
Jahr,Temp_Tag,Temp_Nacht sind Integer
Andreas Schachtner
  Mit Zitat antworten Zitat
Hansa

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

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 17:03
Zitat von ConstantGardener:
..Flaeche ist INTEGER / Termin ist DATE ===> beide Primärschlüssel..
Was heißt denn wohl "primär" ? Du musst das präzisieren, denn so stimmts nicht !
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 17:25
Handelt es sich um einen zusammengesetzten Schlüssel? Davon würde ich Abstand nehmen und einen künstlichen Schlüssel einführen.
Markus Kinzler
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
376 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 18:17
@Hansa

...zusammengesetzter Primärschlüssel sorry.

@mkinzler

...ich habe einen künstlichen Schlüssel erzeugt. Erstmal als AutoInc Feld, sicher nicht schön aber schnell und einfach. ---> gleiches Problem. (Ich hatte den AutoInc nicht im INSERT INTO.)

Neuer Versuch mit künstlichem Primärschlüssel CHAR[30] zusammengesetzt aus Cast(Flaeche as Char(15))+Cast(Termin as Char(15)) ---> gleiches Problem "Merkmal nicht verfügbar"

Das INSERT INTO müßte ja auch ohne Index funktionieren. Also Index gelöscht. ---> gleiches Problem


Ratlosigkeit macht sich breit.... ich hoffe nur bei mir.... ???
Andreas Schachtner
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 18:56
Zitat:
Neuer Versuch mit künstlichem Primärschlüssel CHAR[30] zusammengesetzt aus Cast(Flaeche as Char(15))+Cast(Termin as Char(15)) ---> gleiches Problem "Merkmal nicht verfügbar"
Wenn autoinc (Generator + Trigger) dann sollte der Typ Integer o.ä. sein und darf dann nicht im Insert stehen (Feldliste explizit angeben)
Markus Kinzler
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
376 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 19:19
@mkinzler

...ja ist schon klar, ich hab den Versuch mit dem AutoInc Typ INTEGER mit aufgezählter Feldliste, aber ohne den AutoInc in der selbigen gemacht. Ergebnis =>> Merkmal nicht verfügbar.

Ich hab die Sache jetzt zwischenzeitlich über eine CopyTabelle gelöst. Ist bei ca. 10000 Datensätzen/Jahr und 10-20 Jahren Simulation noch ausreichend performant. Die andere Lösung wäre natürlich eleganter aber die BDE gibts scheinbar nicht her.... pfui, pfui, pfui ich wollte doch nicht schon wieder auf die BDE schimpfen.

Trotzdem danke für die schnelle Hilfe...
Andreas Schachtner
  Mit Zitat antworten Zitat
marabu

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

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 20:31
Hallo,

ich war durch die Schlüssel-Diskussion etwas abgelenkt, bin aber durch den Begriff CopyTabelle aufgeschreckt: Die BDE verlangt bei INSERT INTO SELECT zwei verschiedene Tabellen. Die Fehlermeldung "Merkmal nicht verfügbar" ist da nicht besonders aussagekräftig, leider. Die Verwendung einer einzigen Tabelle "Haustemperatur" hatte ich bei meinem ersten Beitrag übersehen und mich auf das vordergründige Syntaxproblem konzentriert.

Verlegene Grüße
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
376 Beiträge
 
Delphi 10.4 Sydney
 
#20

Re: Datensätze in die gleiche Tabelle kopieren?

  Alt 16. Jan 2007, 21:42
@marabu

verzeihende..? na mal sehen...? ok! freundliche Grüße zurück

...daß die BDE INSERT INTO SELECT nur mit 2 Tabellen erlaubt habe ich jetzt auch rausbekommen.

Meine Frage ist jetzt aber : Woher weißt Du das ? In der LocalSql.hlp, bei Ebner, Kowalski, Nannen, Toolbox usw. steht nichts dergleichen. Immer nur in 3 Sätzen die üblichen Sachen (Values,Select usw.) abgehandelt.

War's doch die Kristallkugel?, oder Altersweisheit ?
Andreas Schachtner
  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 16:50 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