![]() |
Datenbank: ACCESS 2003 • Zugriff über: ADO
SQL Kommando und ADO
Hallo,
ich habe ein ganz simples Problem. Vielleicht ganz easy aber ich kanns nicht lösen: Ich möchte mit Hilfe der ADO Komponenten ein SQL Kommando absetzen. Die einfachen Dinge wie sellect insert usw funktionieren. Sobald ich etwas benutzen will copy, create oder sonst etwas bekomme ich die fhlermeldung, dass das nicht geht. Hintergrund: Ich will eine vorhandene Tabelle, ohne Inhalte, kopieren. Danke im Vorraus |
Re: SQL Kommando und ADO
Wie meinst du "Kopieren" eine Tabelle?
|
Re: SQL Kommando und ADO
Zitat:
|
Re: SQL Kommando und ADO
Hallo
Fehlermeldug: Im Projekt sowieso ist eine Exception der Klasse OLEException aufgetreten. Meldung: Unzulässige SQL Anweisung 'DELETE, INSERT, SELECT oder UPDATE' erwrtet. Ich habe versucht ein copy SQL-command, (ich wollte eine Tabelle kopieren) zu benutzen. Kann ich mit ADO überhaupt SQL Befehle verwenden die nicht gerade 'DELETE, INSERT, SELECT oder UPDATE' sind. Steh ich auf der Leitung? Danke |
Re: SQL Kommando und ADO
'COPY' ist kein SQL-Kommando.
|
Re: SQL Kommando und ADO
Oooooh,
das ist mir doch völlig egal ob das jetzt copy oder sonstetwas ist, ich will wissen wie man ein anderes SQL Kommando (ausser den vieren die ich oben genannt habe) benutzen kann. Danke |
Re: SQL Kommando und ADO
Zitat:
|
Re: SQL Kommando und ADO
Hallo!
Definiere doch mal genau, was du machen willst. Willst du Daten von einer Tabelle in eine andere kopieren? Willst du eine Tabelle kopieren, also anlegen und Daten einfügen? Cu, Udontknow |
Re: SQL Kommando und ADO
Zitat:
Berhard hat meinen minimalistischen Beitrag schon richtig interpretiert. Um eine nicht existierende Tabelle zu kopieren, musst Du sie erstmal erzeugen ('CREATE TABLE'). Dazu musst Du Dir die Struktur der Tabelle aus der Quell-DB rauslesen. Hierzu eignet sich ein TADODataset und ein 'Select * from Tabelle where 1=0'. Damit bekommst Du alle Felder samt Feldtyp. Daraus bastelst Du dir das 'CREATE TABLE' Skript und führst es aus. Anschließend kopierst Du einfach Record für Record in das Zielsystem. [edit]Ob ADO DDL-Kommandos zulässt, weiß ich nicht, aber ich kann mir vorstellen, das die Execute-Methode der ADOConnection keine Zicken macht (bei mir geht's jedenfalls)[/edit] |
Re: SQL Kommando und ADO
ADO selber wird da nicht meckern, es leitet den Commandtext ja einfach nur durch zum SQL-Server. Dieser muss dann natürlich mit den DDL-Kommandos was anfangen können.
Cu, Udontknow |
Re: SQL Kommando und ADO
Hallo,
alzaimar: zu deinen Bemerkungen gebe ich hier keinen Kommentar. ich hatte ganz klar beschrieben was ich machen wollte, nämlich eine Tabelle kopieren, sonst nichts. Lösung: select * into Tabelle2 from Tabelle1 Wenn mir noch jemand sagt wie man das ohne Inhalte macht bin ich zufrieden. Danke |
Re: SQL Kommando und ADO
Zitat:
Zitat:
Zitat:
|
Re: SQL Kommando und ADO
Zitat:
Zitat:
Du hast übrigens *nicht* ganz klar beschrieben, was Du machen wollstest: Du hast von 'COPY' Befehlen gefalselt, aber nicht, WOHIN eine Tabelle kopiert werden soll. Du bist auch nicht auf die Fragen der anderen Teilnehmer eingegangen. |
Re: SQL Kommando und ADO
Ich hatte in #1 schon gefragt wie du das meinst, diese Frage hast du deinerseits ja nie beantwortet.
Du willst also eine neue Tabelle mit der selben Struktur einer anderen anlegen |
Re: SQL Kommando und ADO
Zitat:
Das war leider nicht so klar, wie du meinst. Eine Tabelle hast du hier nämlich nicht kopiert, sondern Daten von Tab A nach Tab B geschoben. Ein Kopieren impliziert die Neuanlage der Tabelle(nstruktur), und da hat alzaimar dann recht, da müsste man dann erst ein Kommando zum Erstellen aufbauen. Hier ein bisserl Code für den Aufbau (evtl. DB2-spezifisch und durchaus noch zu verbessern):
Delphi-Quellcode:
Cu,
procedure GenerateDDLOfDataset(Dataset: TDataset; DDL: TStrings; Options: TGenerateOptions);
var i: integer; var Str: string; var Field: TField; begin //Create-Befehl DDL.Clear; DDL.Add('CREATE TABLE "SCHEMA"."TABELLE"'); DDL.Add('('); //Alle Felder auflisten for i := 0 to Dataset.Fields.Count - 1 do begin //Feldnamen Field := Dataset.Fields[i]; //nicht sichtbare Felder ignorieren? if not Field.Visible and (goIgnoreUnvisibleFields in Options) then Continue; Str := '"' + Uppercase(Field.FieldName) + '"'; //Feldtyp if Field is TIntegerField then Str := Str + ' integer' else if Field is TFloatField then Str := Str + ' double' else if Field is TStringField then Str := Str + ' varchar(' + IntToStr(TStringfield(Field).Size) + ')' else if Field is TDateField then Str := Str + ' date' else if Field is TTimeField then Str := Str + ' time' else if Field is TDateTimeField then Str := Str + ' timestamp' else if Field is TSQLTimeStampField then Str := Str + ' timestamp' else if Field is TMemoField then Str := Str + ' clob(???) logged' else if Field is TBlobField then Str := Str + ' blob(???) logged' else raise Exception.CreateFmt('Feldtyp für Klasse %s unbekannt.', [Field.ClassName]); //nicht null? if Field.Required then Str := Str + ' not null'; //Letztes Feld? Kein Komma if i < Dataset.Fields.Count - 1 then Str := Str + ','; DDL.Add(Str); end; DDL.Add(')'); DDL.Add('IN "USERSPACE1";'); end; Udontknow |
Re: SQL Kommando und ADO
Hallo,
es funktioniert genauso wie ich oben beschrieben hatte. select * into Tabelle2 from Tabelle die Tabelle wird angelegt und der Inhalt mitkopiert. Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 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 by Thomas Breitkreuz