Tabelle mit fortlaufenden Nummern

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Vutinok.

    Tabelle mit fortlaufenden Nummern

    Hallo Leute,

    wie bekomme ich es hin, dass ich über VB.Net eine Tabelle erstelle, die dann auf dem Server landet und jeder Datensatz, den ich z. B. mit

    VB.NET-Quellcode

    1. command.CommandText = "INSERT INTO Tabelle VALUES();"
    mache, dass in der ersten Spalte der Tabelle die Nummerierung bei jedem Hinzufügen des Datensatzes diese fortlaufend zählt, also z. B. mache ich Datensatz, dann 1, dann noch einen Datensatz, dann 2, usw.?

    Ich habe dies schon z. B. mit

    VB.NET-Quellcode

    1. command.CommandText = "INSERT INTO Tabelle VALUES(nummer int identity primary key);"
    oder anderen Sachen probiert, die den Autowert wie z. B. in Access nachbilden, damit jeder Datensatz eindeutig nummeriert wird, aber dann kommt es zu einer Syntax-Fehlermeldung.

    Ich möchte dann bei Hinzufügen jedes Datensatzes, dass nach oben gezählt wird (1, 2, 3...), neben den Nummerierungen z. B. in der 2. Spalte dann z. B. "Tabelle1, Tabelle2, Tabelle3, ..." daneben steht.

    Damit garantiere ich immer eindeutige Tabellennamen, die ich dann nutzen kann.

    Wirklich, ich habe alles probiert, aber es will einfach nicht so, wie es soll.

    Auf Tipps wäre ich sehr dankbar!

    Liebe Grüße,
    Vutinok
    Normalerweise macht das die Datenbank selbst, wenn die entsprechende Spalte auf AutoIncrement gestellt ist.
    Beispiel bei MySql:

    SQL-Abfrage

    1. # Man beachte das "AUTO_INCREMENT" bei der ID-Spalte.
    2. CREATE TABLE `test`.`Table1` (
    3. `Id` INT NOT NULL AUTO_INCREMENT,
    4. `Name` VARCHAR(45) NULL,
    5. PRIMARY KEY (`Id`));
    6. INSERT INTO test.Table1
    7. (`Name`)
    8. VALUES
    9. ('Sepp'),
    10. ('Hans');

    Die ID wird beim Einfügen nicht angegeben. Dadurch wird von der Datenbank automatisch die nächste ID verwendet.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Danke für die schnelle Antwort, aber leider funktioniert das nicht. Habe es so auch schon ausprobiert!

    Folgendes habe ich getan:


    Codeausschnitt:

    VB.NET-Quellcode

    1. con.ConnectionString = "Server=11.111.111.111; Database=Test; Uid=Hallo; Pwd=12345" (abgeändert)
    2. con.Open()
    3. command.Connection = con
    4. command.CommandText = "CREATE TABLE Tabelle (id INT NOT FULL AUTO_INCREMENT, username VARCHAR(30) NULL, PRIMARY KEY (id));"
    5. command.ExecuteNonQuery()


    Auch habe ich es wie oben beschrieben mit Hochstrichen gemacht und genau das gleiche geschrieben. Der gezeigte Code ist auch ein Versuch, der nicht geklappt hat.

    Gibt es da noch was anderes?

    LG Vutinok

    PS: Folgende Fehlermeldung erhalte ich:

    Ein Ausnahmefehler des Typs "MySql.Data.MySqlClient.MySqlException" ist in MySql.Data.dll aufgetreten.

    Zusätzliche Informationen: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL AUTO_INCREMENT, username VARCHAR(30) NULL, PRIMARY KEY (id))' at line 1

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vutinok“ ()

    SQL-Abfrage

    1. NOT FULL AUTO_INCREMENT

    Nicht "NOT FULL", sondern "NOT NULL".

    Hätt'ste aber auch selber drauf kommen können.
    syntax to use near 'FULL AUTO_INCREMENT,
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Hallo Niko, dann bekomme ich auch die Fehlermeldung. Leider.

    @ErfinderDesRades: Ich habe eine Tabelle Hans, in der wiederum die Tabellen gespeichert werden. Ich meine z. B. jedes Mal, wenn ich mich bei meinem Programm anmelde, dass dann durch den SQL-Befehl "Create..." eine Tabelle erstellt wird in der Datenbank und diese eben dann z.B. als Tabelle1 in Tabelle Hans gespeichert wird. Wenn ich mich wieder anmelde, dann wird durch "Create..." wieder eine Tabelle2 in der Datenbank erzeugt und wieder in die Tabelle Hans eingetragen. Da ich auf die einzelnen Tabellen zugreifen möchte, möchte ich sie fortlaufend nummerieren.
    Während der Laufzeit beliebig Tabellen zu erzeugen widerspricht den Grundprinzipien einer relationalen Datenmodellierung.
    Arbeite dich also in diese Prinzipien ein und konzipiere dann ein tragfähiges Datenmodell.

    Am besten lässte die Datenbank erstmal weg, denn in Datenmodellierung kann man sich besser einarbeiten, wenn man das Datenmodell nur einmal anlegt, in einem typisierten Dataset.
    Später lässt sich auch wieder eine Datenbank hinterlegen, aber solange das Datenmodell noch unausgereift ist, ist diese doppelte Datenmodell-Haltung, wie sie in richtigen Datenbank-Anwendungen vorgesehen ist, nur unnötig anfällig.
    gugge Datenverarbeitungs-Vorraussetzungen
    Hey ErfinderDesRades,

    ich mache eine Art Up- und Downloadbereich, in der Nutzer ihre Daten up- und downloaden können. Wenn sich jemand anmeldet und eine Datei uploadet, dann wird das in die Tabelle gespeichert, damit der User weiß, dass sich diese Datei auf dem Server befindet. Wenn sich jemand registriert, dann soll für denjenigen eine alleinige Tabelle zur Verfügung stehen, indem nur er seine eigenen Dateien einsehen kann. Alle Dateien sind aber auf einem Server. Dies ist natürlich kontraproduktiv, da auch andere Nutzer die Daten von einem Nutzer haben können, für die sie nicht bestimmt sind. Dieses Programm dient zur Übung. Also, ich dachte mir, dass man während der Laufzeit immer für jeden neu registrierten Nutzer eine für ihn eigene Tabelle erstellt, welches er nutzen kann, um seine eigens upgeloadeten Dateien zu sichten. Dieses ganze Programm ist nicht für die Praxis bestimmt, weil es extrem hohe Sicherheitslücken aufweist. Es dient erst einmal nur zum Einarbeiten von VB.Net mit ADO.Net.

    Vutinok schrieb:

    Einarbeiten von VB.Net mit ADO.Net.
    Ja, dann konzipier ein reguläres Datenmodell, mit einer Tabelle User, und einer Tabelle Upload, und Upload ist der User-Tabelle untergeordnet.

    Also diese beiden Tabellen, und die Relation User -> Upload, und keine weiteren Tabellen
    auf weitere Infos dazu ist ja in Post#7 verlinkt
    Wärst du so nett, vielleicht noch ein wenig detaillierter zu schreiben, dass ich vielleicht so ein grobes Konzept bekomme.
    Habe mir Post#7 angeschaut, aber irgendwie kann ich damit zur Zeit noch nichts anfangen. Bin in dem Bereich noch gar nicht so wirklich bewandert.

    Vielleicht kannst du mir einfach schnell eine spezfische Erklärung abgeben.

    Genau, derzeit habe ich zwei Tabellen so wie oben beschrieben. Wie Upload ist der Tabelle User untergeordnet? Ich bin mir ein wenig im klaren mit Access z. B. und deren Beziehungen und wie so eine Datenbank funktioniert, aber auch nur so halbwissenmäßig.

    Könntest du mir eine kurze Beschreibung abgeben.

    Danke dir!
    na, dein Problem ist, dass dir die relationale Grundidee unbekannt ist - die ist dort unter 5) abgehandelt.
    Und in 6) wird sie in vielen Beispielen zigfach in praktischer Anwendung vorgeführt.
    Noch genauer problembezogene Angaben mache ich bereits in post#9 - das mit der Relation User->Upload - aber das versteht man ja nicht, wenn man die relationale Grundidee nicht kennt.
    Hey ErfinderDesRades,

    ja, das ist eben das Problem. Ich muss mich in diese Materie noch reinarbeiten, weil ich davon überhaupt keine Ahnung habe.
    Aber ich danke dir für deine Mühe!

    @Niko Ortner: Es hat doch geklappt! Danke dir.
    Hey Leute,

    das mit dem

    SQL-Abfrage

    1. ID INT NOT NULL AUTO_INCREMENT
    hat ja geklappt, beginnt aber mit 1 und zählt dann rauf. Wie macht man genau den gleichen Vorgang beginnend mit 0? Habe schon folgendes ausprobiert:

    SQL-Abfrage

    1. ID INT NOT NULL (0,1)
    ,

    SQL-Abfrage

    1. ID INT IDENTITY (0,1)
    und

    SQL-Abfrage

    1. ID INT IDENTITY(0,1) NOT NULL
    .

    Der restliche Code blieb, wie bei post#2 beschrieben, gleich.
    Was kann man tun?

    Danke euch!

    LG Vutinok

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Vutinok“ ()

    Danke für deine Antwort, AliveDevil!

    VB.NET-Quellcode

    1. command.CommandText = "Create Table TrueFalse (zugehoerigeZeileFuerNutzer varchar(30) NULL, ID INT NOT NULL AUTO_INCREMENT=0, buttonTrueFalse varchar(5) NULL, PRIMARY KEY (ID));"


    Folgende Fehlermeldung:

    Zusätzliche Informationen: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=0, buttonTrueFalse varchar(5) NULL, PRIMARY KEY (ID))' at line 1

    Gibt es noch andere Möglichkeiten?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Vutinok“ ()

    VB.NET-Quellcode

    1. command.Connection = con
    2. command.CommandText = "Create Table TrueFalse (zugehoerigeZeileFuerNutzer varchar(30) NULL, ID INT NOT NULL AUTO_INCREMENT, buttonTrueFalse varchar(5) NULL, PRIMARY KEY (ID));"
    3. command.ExecuteNonQuery()
    4. command.CommandText = "ALTER TABLE TrueFalse AUTO_INCREMENT = 2;"
    5. command.ExecuteNonQuery()


    Aber alle Werte außer 0 gehen. Verdammt, was mache ich falsch?