2009-02-10 5 views
9

J'ai une table SQLite:Comment retourner la valeur de la colonne AUTO INCREMENT SQLite avec VB6

CREATE TABLE "EventType" 
(
[EventTypeID] INTEGER PRIMARY KEY, 
[EventTypeName] VARCHAR(50) NOT NULL UNIQUE 
); 

Depuis EventTypeID est un entier et une clé primaire, qui fait automatiquement une colonne auto-incrémentée, et ça fonctionne bien.

Je voudrais insérer une ligne dans la table et obtenir la nouvelle valeur incrémentée de VB6.

Dim oRs as Recordset 
dim oCmd as new Command 

oCmd.ActiveConnection = GetConnection() 
oCmd.Source = "insert into EventType (EventTypeName) values ('blah')" 
oCmd.Execute 

est-il un moyen automatique pour récupérer le EventTypeID nouvellement créé sans avoir à émettre une autre requête (select max (EventTypeID) à partir EventType))? Je crois me souvenir de VB6 il y a longtemps, il y avait un moyen de le faire.

+0

double possible de [? Est-ce que le soutien SQLite CHAMP D'APPLICATION \ _IDENTITY] (http://stackoverflow.com/questions/304543/ne-sqlite-support-scope-identity) –

Répondre

14

Does SQLite support SCOPE_IDENTITY?

Vérifiez la FAQ. La fonction sqlite3_last_insert_rowid() le fera. Attention aux déclencheurs si

Non testé, mais vous devriez pouvoir envoyer les deux instructions en un seul appel. Cela fait un moment que j'ai écrit un VB6. De plus, ce n'est pas sûr pour l'injection SQL.

Dim oRs as Recordset 
dim sSql as String 
sSql = "INSERT INTO EventType (EventTypeName) VALUES ('blah'); SELECT last_insert_rowid() FROM EventType" 
oRs.Open sSql oConn 
+4

btw, avec le pilote ODBC, vous devez diviser votre requête en 2 appels. – AngryHacker

+0

alors qu'est-ce que Insert() retourne alors? - Je sais que je peux le chercher, mais ça peut être utile ici pour l'exhaustivité, puisque c'est comme ça que j'ai trouvé ce post. –

2

Je n'utilise VB, donc je ne sais pas l'interface que vous utilisez avec votre base de données, mais, comme l'a dit bendewey, il y a une fonction dans l'API c appelé sqlite3_last_insert_rowid() qui renverra la clé entière primaire pour la dernière ligne insérée, de sorte que vous pouvez rechercher une fonction similaire dans votre interface.

Si cela ne fonctionne pas, vous pouvez utiliser la requête spécifique à SQLite:

SELECT last_insert_rowid() 
2

Vous pouvez appeler SELECT last_insert_rowid() après votre insertion

0

Si l'utilisation

SELECT last_insert_rowid() 

retourne la dernière rowid, vous pouvez utiliser:

SELECT last_insert_rowid() AS rowid FROM table_name LIMIT 1 

pour obtenir le dernier rowid pour une table individuelle

+1

Ce n'est pas ce que la [documentation] (https://www.sqlite.org/lang_corefunc.html#last_insert_rowid) dit: "La fonction SQL last_insert_rowid() est un wrapper autour de la fonction d'interface C/C++ sqlite3_last_insert_rowid()." ce qui signifie qu'il n'y a rien de tel que le dernier 'rowid' pour une table individuelle. –

3

exécuter cette requête à l'intérieur de votre code:

SELECT SEQ from sqlite_sequence WHERE name='tablename' 
Questions connexes