Einzelnen Beitrag anzeigen

Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Teildatenbank aus großer Datenbank erzeugen

  Alt 9. Dez 2009, 07:56
Hallo zuzsammen,

die Variante mit SELECT INTO hat im Praxistext fehlgeschlagen mit der Fehlermeldung "Abfrage ist zu komplex".
Bei dieser Variante dürfen die Tabellen nicht existieren. Das SELECT INTO erzeugt selbst die Tabelle und schreibt dann alle Abfrageergebnisse in diese neue Tabelle.

Das Problem ist, das die WHERE Klausel in der Praxis mehr als 40 ("...WHERE ID=1 OR ID=2 OR ID=23 OR ID=56...")
ID´s auf einmal abfragt. Dies ist mit ADO, so wie es aussieht nicht möglich.
Mehrere SELECT INTO Abfragen auf die selbe Tabelle sind nicht möglich, da nach der ersten Abfrage die Tabelle besteht und es dann eine Fehlermeldung geben würde.
Wenn ich mich mit dieser Aussahe irre, schreit mich einfach an


alzaimers Variante würde im Prinzip funtionieren....
Delphi-Quellcode:
Procedure TForm1.CopyRecords (aSrcConnection, aDstConnection : TADOConnection; aTableName : String; aID : Integer);
Var
  qSource, qDest : TADOQuery;
  i : Integer;
Begin
  qSource := TADOQuery.Create(nil);
  qSource.Connection := aSrcConnection;
  qDest := TADOQuery.Create(nil);
  qDest.Connection := aDstConnection;
  try
     qSource.SQL.Text := Format ('select * from [%s] where Text_ID = :ID',[aTableName]);
     qDest.SQL.text := qSource.SQL.text;
     qSource.Parameters.ParamValues['ID'] := aID;
     qSource.Open;
     qDest.Open;
     while not qSource.Eof do
     begin
       qDest.Append;
       For i:=0 to qSource.FieldCount - 1 do
         qDest[qSource.Fields[i].FieldName] := qSource.Fields[i].Value;
       qDest.Post;
       qSource.Next;
     end;
  finally
     qSource.Free;
     qDest.Free;
  end;
end;
Im Prinzip, da es im Praxistest fehlgeschlagen ist. Das Feld Text_ID ist ein Autowert Feld.
Es muss aber dieselbe ID letzendlich haben, wie es in der Quelldatenbank stand.
Jetzt bitte nicht "dann hast du die DB falsch konzipiert..." usw.
Die DB ist mir vorgegeben, sie ist nicht von mir, da kann ich nichts dran rütteln und muss es als Tatsache hinnehmen.
Es kommt ein Fehler der sagt, das Text_ID nicht verändert werden kann.
Klingt auch logisch, da es ein Autowert Feld ist.

Habe ich trotzdem eine Möglichkeit in ein Autowert-Feld einen Wert einzutragen?
Oder habt ihr vielleicht einen anderen Ansatz mit der ich das bewerkstelligen kann?

P.S.: Meine Ursprungsvariante von der ich dachte, dass es funktioniert, hat denselben Makel, das Autowert Feld macht mir einen Strich durch die Rechnung.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat