INSERT INTO

08/04/2009 - 11:11 von MoroIvan | Report spam
u.u. eine anfàngerfrage:

ich komme von paradox und bin dabei meine anwendungen umzustellen.
dabei gibt es etliche sehr gute sachen der alten software, die man nicht
missen möchte, so dass ich mir diese als 'tools' in .net programmieren will.
ich verwende die sqlce (sdf) datenbanken, da sie am einfachsten handhabbar
sind und in meinen lan-anwendungen vollkommen ausreichen.

vorbemerkung:
der direkte import der daten aus paradox-tabellen in sdf funktioniert nicht
richtig (bei mdb auch nicht). z.b. werden die blob felder nicht übernommen.
hat jemand eine idee, woran es liegt (wie man es richtig macht)?

ich verwende die folgende sql anweisung:

SELECT * INTO sdfTabelle
FROM dbTabelle IN 'E:\Pfad' 'Paradox 7.x;'


die weiteren fragen:
in paradox gibt es viele sehr nützliche methoden wie add, subtract, ... die
ich mir jetzt programmieren will.

add(string quelle, string ziel, bool anhàngen, bool aktualisieren)
subtract(string quelle, string ziel)


1) add
quelle: quelldatenbank + tabelle
ziel: zieldatenbank + tabelle
anhàngen: neue datensàtze sollen hinzugefügt werden
aktualisieren: bestehende datensàtze aktualisieren (nur indizierte tabellen)

dabei müssen die tabellenstrukturen kompatibel sein.
hat quelltabelle mehr spalten, so werden in der zieltabelle nur die
vorhandenen spalten aktualisiert
hat quelltabelle weniger spalten, so werden in der zieltabelle die
überzàhligen spalten ignoriert

mein "problem" ist dies für tabellen in unterschiedlichen datenbanken
durchzuführen.

die sql anweisung:

INSERT INTO zieltabelle
SELECT quelltabelle-felder FROM quelltabelle

funktioniert mit mehreren tabellen in einer datenbank. wie lautet die
anweisung bei zwei datenbanken (d.h. zieltabelle ist in einer anderen
datenbank)? kann jemand ggf. als kurzes beispiel die komplette anweisung
schreiben?


2) subtract
quelle: quelldatenbank + tabelle
ziel: zieldatenbank + tabelle

löscht aus der zieltabelle alle datensàtze, die in der quelltabelle
vorhanden sind
bei indizierten tabellen werden die indizierten records gelöscht
bei nicht indizierten müssen die records komplett übereinstimmen (außer blob
felder)

danke.
 

Lesen sie die antworten

#1 Elmar Boye
08/04/2009 - 15:19 | Warnen spam
Hallo Ivan,
"MoroIvan" schrieb ...
ich komme von paradox und bin dabei meine anwendungen umzustellen.
dabei gibt es etliche sehr gute sachen der alten software, die man nicht
missen möchte, so dass ich mir diese als 'tools' in .net programmieren will.
ich verwende die sqlce (sdf) datenbanken, da sie am einfachsten handhabbar
sind und in meinen lan-anwendungen vollkommen ausreichen.



Vorab: SQL Server Compact ist zwar mit dem SQL Dialekt SQL Server
weitgehend kompatible unterstützt aber nur einen kleineren Teil.
Was vor allem darin begründet ist, das es für mobilen Rechner
mit geringen Ressourcen konzipiert wurde.

Was für Dich aber auch Abstriche bedeuten kann.
Wenn Du Dein Anwendungsbereich vornehmlich Windows-/Netzwerkanwendungen
sind solltest Du Dir auch SQL Server 2008 Express anschauen.
Das ist kostenlos und bietet einen größeren Umfang.

vorbemerkung:
der direkte import der daten aus paradox-tabellen in sdf funktioniert
nicht richtig (bei mdb auch nicht).



Microsoft Access / Jet unterstützt max. Version 5.0:
URL:http://support.microsoft.com/kb/230126
Was an an der geringen Bedeutung von Paradox in den letzten
Jahren liegen dürfte (ich kenne es auch nur aus DOS Zeiten).

z.b. werden die blob felder nicht übernommen.
hat jemand eine idee, woran es liegt (wie man es richtig macht)?



Eine Unterstützung für neuere Paradox Versionen wird Du wenn
überhaupt nur über die BDE bekommen, da das Programm aus
gleichem Hause kam.

Da ich genügend Paradox Know-How Deinerseits vermute:
Ggf exportiere die Blob Daten als Dateien und füge diese
in die Tabellen nachtràglich ein.

die weiteren fragen:
in paradox gibt es viele sehr nützliche methoden wie add, subtract,
... die ich mir jetzt programmieren will.

add(string quelle, string ziel, bool anhàngen, bool aktualisieren)
subtract(string quelle, string ziel)



Auch wenn es im ersten Moment vertrauter erscheint, rate ich Dir:
Setzte Dich zunàchst mit .NET nàher auseinander.
Die Klassenbibliotheken bieten bereits Lösungen
für die meisten Dinge. Ein Einstieg wàre:
http://msdn.microsoft.com/de-de/library/63bf39c2(VS.80).aspx
"Schnelle Technologieübersicht"


1) add
quelle: quelldatenbank + tabelle
ziel: zieldatenbank + tabelle
anhàngen: neue datensàtze sollen hinzugefügt werden
aktualisieren: bestehende datensàtze aktualisieren (nur indizierte tabellen)



Das ist etwas was Dir in .NET wenig nützt.
Solche Aufgabenstellungen erledigt z. B. ein DataAdapter
in Verbindung mit einer DataTable. Mehr dazu:
http://msdn.microsoft.com/de-de/library/ms254950(VS.80).aspx

Die DataAdapter bieten verschiedenste Möglichkeiten Spalten
an unterschiedliche Tabellenstrukturen anzupassen.
Und Durch den Tausch der Verbindung kannst Du
beliebige Datenbanken ansprechen.

die sql anweisung:

INSERT INTO zieltabelle
SELECT quelltabelle-felder FROM quelltabelle



SQL Server CE ist zudem für Datenbankübergreifende Verbindungen
nur wenig geeignet.
Und schon mit SQL Server Express besteht bei 4GB Datenbankgröße
(die Vollversionen können Terabytes verwalten) - und einer
fast belieben Anzahl von Datenbanken in einer Instanz keine
Notwendigkeit, Daten auf verschiedene Dateien zu verteilen,
wie es vielleicht für Paradox sinnvoll gewesen sein mag.

Und so solltest Du Deine bisherigen Progammierparadigmen
auf Sinnhaltigkeit überprüfen.

Gruß Elmar

Ähnliche fragen