ist es möglich, bei einer tabellenerstellungsabfrage auch gleichzeitig
einen autowert zu erstellen ???
mfg
richard
Leider fürchte ich nein, wenn Du allerdings eine Möglichkeit findest,
bin ich sehr daran interessiert...
Hatte das Problem schon diverse Male.
Meine Lösung (nur in Access) wäre:
a) ID-Spalte nachträglich erstellen, oder
b) Tabelle mit ID-Spalte erstellen, und dann
INSERT INTO Ziel (...,...,...,...,...,...,...,...)
SELECT ...,...,...,...,...,...,...,... FROM Quelle
--
Best regards,
Lars Uffmann
------------------------------------------------------------------
Lars Uffmann, m+r infosysteme, D-52070 Aachen, Hubert-Wienen-Str. 24
Tel +49-241-93878-15 Fax +49-241-93878-20 eMail l...@mrinfo.de
http://www.mplusr.de
------------------------------------------------------------------
>> ist es möglich, bei einer tabellenerstellungsabfrage auch gleichzeitig
>> einen autowert zu erstellen ???
>
>Leider fürchte ich nein, wenn Du allerdings eine Möglichkeit findest,
>bin ich sehr daran interessiert...
Der Datentyp heißt für Autowert heißt "counter".
Also:
create table deineTabelle (IDSpalte counter)
Gruß
Phil
--
Ich beantworte keine technischen Fragen per Email
Richtig zitieren: http://www.afaik.de/usenet/faq/zitieren/
Mein Codekabinett: http://www.codekabinett.com/
Karl Donaubauer's Access-FAQ: http://www.donkarl.com
und wie baue ich das ganze in eine gespeicherte (kein code)
tabellenerstellungsabfrage ein???
mfg
richard
Philipp Stiefel schrieb:
>und wie baue ich das ganze in eine gespeicherte (kein code)
>tabellenerstellungsabfrage ein???
Oh, sorry, wer lesen kann ist klar im Vorteil.
Mit einer Tabellenerstellungsabfrage funktioniert das natürlich
nicht.
Aber mal anders gefragt. Was ist den der Hintergund deiner Tabellen-
erstellungsabfrage? Wenn du dort einen Autowert brauchst liegt die
Annahme nahe, dass du damit auch weiter arbeiten willst. Wäre es da
nicht villeicht sinnvoller die Tabelle erstmal leer zu erstellen und
die Daten dann über eine zweite Abfrage einzufügen?
hab das problem so gelöst, daß ich nach ausführen der abfrage (aufruf in
prozedur), mittels code eine autofeld erstelle.
sinn und zweck: ich schreibe 1 bis 2000 datensätze (je nach filter) in
die tabelle, und drucke dann etiketten.
sollte der druck zb. beim 510 datensatz abbrechen, muß ich einen
wiederholdruck ab pos. XX anbieten.
Philipp Stiefel schrieb:
Richard Raith schrieb kürzlich:
>hab das problem so gelöst, daß ich nach ausführen der abfrage (aufruf in
>prozedur), mittels code eine autofeld erstelle.
Das ist natürlich auch eine Lösungsmöglichkeit.
>sinn und zweck: ich schreibe 1 bis 2000 datensätze (je nach filter) in
>die tabelle, und drucke dann etiketten.
>sollte der druck zb. beim 510 datensatz abbrechen, muß ich einen
>wiederholdruck ab pos. XX anbieten.
Ah so, verstehe.
Dazu könnte man auch in der Tabellenerstellungsabfrage ein
zusätzliches Feld als Nummerierung erstellen lassen. (Siehe dazu
FAQ 3.11 bei http://www.donkarl.com).
> > ist es möglich, bei einer tabellenerstellungsabfrage auch gleichzeitig
> > einen autowert zu erstellen ???
>
> Leider fürchte ich nein, wenn Du allerdings eine Möglichkeit findest,
> bin ich sehr daran interessiert...
Sorry, aber das geht wohl
lt MSKB Artikel Q116145 geht das (sogar bereits ab Asbach Access 2.0 !)
sogar mittels DDL, und zwar:
CREATE TABLE Table1 (Id COUNTER CONSTRAINT PrimaryKey PRIMARY KEY, _
MyText TEXT (10))
Den Artikel erhaltet ihr mittels http://msdn.mircosoft.com und dann einfach
nach der Nummer suchen
wie es mit DAO geht, steht in der KnowHow.mdb (www.accessware.de) im Modul
mdlSonstiges??? in der Funktion fCreateAutoNumberField von Dev
Diese FUnktion kann man gut mit der Funktion acg_CreateTable (auch da)
kombinieren.
-- mfg
Klaus KO...@gmx.de
Ich beantworte keine NG-Fragen und -Nachfragen per Mail!
PS:Tips und Tricks zu ACCESS 97 (** KnowHow-MDB ** Ver 3.0 - 30.9.1999)
unter http://www.accessware.de/ Access-FAQ bei:
http://www.donkarl.com/AccessFAQ.htmSQL-Server-FAQ:
http://www.berndjungbluth.de
Klaus Oberdalhoff schrieb kürzlich:
>> > ist es möglich, bei einer tabellenerstellungsabfrage auch gleichzeitig
>> > einen autowert zu erstellen ???
>>
>> Leider fürchte ich nein, wenn Du allerdings eine Möglichkeit findest,
>> bin ich sehr daran interessiert...
>
>Sorry, aber das geht wohl
Jein. Du hast die Frage genauso "anders" (als sie gemeint war)
gelesen wie ich, was man an der sehr ähnlichen Antwort sehen kann. :-)
Es geht darum eine *neue* Autowertspalte (fortlaufend nummeriert) in
einer "SELECT ... INTO" Tabellenerstellungsabfrage zu erzeugen.
Und da muss ich zumindest passen. ;-/
Viele Grüße
> Es geht darum eine *neue* Autowertspalte (fortlaufend nummeriert) in
> einer "SELECT ... INTO" Tabellenerstellungsabfrage zu erzeugen.
>
> Und da muss ich zumindest passen. ;-/
I see, OK, jaa da muss ich auch passen.
Es sei denn, man erzeugt ERST die Tabelle via Create (Tabellenerstellung)
und macht DANN einen Insert (Anfügeabfrage) in die BESTEHENDE Tabelle, so
würde ich das halt machen, das erscheint mir in diesem Falle am Einfachsten,
OK es sind dann halt ZWEI SQL-Statements, aber was solls, oder nicht
(Bekannte Struktur vorausgesetzt) ?
Oder, wenn man die Struktur nicht kennt, macht man einen SELECT TOP 1 ...
INTO ...
Löscht diese einen einen Datensatz, und hängt dann via DAO noch ein
Tabellenfeld an die Tabelle dran, und macht dann die Anfügeabfrage ...
ES IST :-)
Modul Allgemein:
' <schnipp>
Option Explicit
Option Compare Database
Private IDCounter As Long
Public Function ResetTmpID() As Integer
IDCounter = 0
ResetTmpID = IDCounter
End Function
Public Function tmpID(p As Variant) As Long
IDCounter = IDCounter + 1
tmpID = IDCounter
End Function
' <schnipp>
Nun die folgende SQL-Abfrage:
SELECT ResetTmpID()+tmpID ([Irgendein Feld der Abfrage])-1 AS AutoID, * FROM
Tabelle
(Wahlweise: Erst per Code ResetTmpID aufrufen, dann
SELECT tmpID ([Irgendein Feld der Abfrage]) AS AutoID, * FROM Tabelle)
Folgender Trick:
Access versucht, Funktionsaufrufe zu optimieren. Deshalb werden
datenunabhängige
Funktionen nur ein einziges Mal (am Anfang) ausgewertet. Die einfache
Ergänzung des
Aufrufs von tmpID um einen datensatzabhängigen Parameter (egal welcher
Feldname)
reicht aus, damit Access die Funktion bei _jedem_ Datensatz auswertet -
TATAAAA: Fertig ist die AutoID-Spalte
Der separate Aufruf von ResetTmpID wird umgangen, indem man sich denselben
Effekt zunutze macht: Diese Funktion hat keinen Parameter, daher wird sie
nur ein
einziges Mal (zu Beginn der Abfrage) ausgewertet.
Fragt mich jetzt bitte nicht, wieso der Ausdruck ResetTmpID() + tmpID
(Feldname)
beim ersten Datensatz eine 2 liefert, er tut es einfach.
Scheinbar wird tmpID schon einmal vorweg ausgewertet.
Egal, die -1 erledigt das.
Viel Spaß!
>> ist es möglich, bei einer tabellenerstellungsabfrage auch gleichzeitig
>> einen autowert zu erstellen ???
>
>ES IST :-)
Bei mir nicht. ;-/
>Private IDCounter As Long
>
>Public Function ResetTmpID() As Integer
> IDCounter = 0
> ResetTmpID = IDCounter
>End Function
>
>Public Function tmpID(p As Variant) As Long
> IDCounter = IDCounter + 1
> tmpID = IDCounter
>End Function
>
>' <schnipp>
>
>Nun die folgende SQL-Abfrage:
>
>SELECT ResetTmpID()+tmpID ([Irgendein Feld der Abfrage])-1 AS AutoID, * FROM
>Tabelle
>
>(Wahlweise: Erst per Code ResetTmpID aufrufen, dann
>SELECT tmpID ([Irgendein Feld der Abfrage]) AS AutoID, * FROM Tabelle)
[...]
>TATAAAA: Fertig ist die AutoID-Spalte
Bei mir kommt da nur ein normales Zahlenfeld raus, kein AutoWert.
Natürlich ist das Vorgehen eine Lösung für das konkrete Problem,
aber ein Feld mit dem speziellen Datentyp Autowert wird dabei nicht
erzeugt.
>Fragt mich jetzt bitte nicht, wieso der Ausdruck ResetTmpID() + tmpID
>(Feldname)
>beim ersten Datensatz eine 2 liefert, er tut es einfach.
>Scheinbar wird tmpID schon einmal vorweg ausgewertet.
>Egal, die -1 erledigt das.
Bei mir liefert die Funktion beim ersten Aufruf 1, so wie sich das
gehört.
Gruß