ADO connectie error opvange

Pagina: 1
Acties:

  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06-2025

mookie

Heerlijk Helder

Topicstarter
Ik heb een ASP pagine op een IIS5 server en die leest of schrijft wat in een MySQL database.
Alles werkt goed alleen ik wil graag info opvangen via de ado connectie.

Stel ik heb een tabelletje:

mysql> describe tabel1;
+----------------+--------------+------+-----+---------+----------------+
| Field                   | Type          | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| tabel_id              | mediumint(9) |        | PRI | NULL | auto_increment |
| tabel_Description  | varchar(100) |        | UNI |         | |
| tabel_inser ted     | date             | YES |       | NULL | |
| tabel_owner         | mediumint(9) | YES |       | NULL | |
+----------------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)

stel ik geef het volgende SQL commando:

mysql> insert into tabel values(NOT NULL,'ROW5',NOW(),1);
Query OK, 1 row affected (0.00 sec)

gevolg is dat de tabel_id keurig 1 wordt opgehoogd, de tekst wordt ingevoerd, datumpje wordt ingevuld en de owner krijgt een getalletje.

Erg mooi
Als ik hetzelfde statement opnieuw uitvoer zie ik:

mysql> insert into tabel values(NOT NULL,'ROW5',NOW(),1);
ERROR 1062: Duplicate entry 'ROW5' for key 2

de Unique key op tabel_description vangt keurig netjes de dupe op en voegt hem niet toe. Ik zie dat het fout gaat aan de foutmelding.

Nu voer ik de statements via ADO uit op de DB en wel als volgt:

adoConn.Execute "insert into tabel(tabel_id, tabel_description, tabel_inserted, tabel_owner) values(NOT NULL,'ROW5',NOW(),1)"

werkt prima alleen zie ik nu niet dat het record niet is toegevoegd want de adoconn.error.count staat nog op nul aangezien het statement keurig netjes is uitgevoerd.

Weet iemand hoe je een soort van status via ado kunt terughalen zoals je die in MySQL via de commando regel te zien krijgt?

Misschien moet ik een recordset ipv een connectie gebruiken maar daar heb ik in het verleden wat problemen mee gehad.

Thnx. _/-\o_

mookie


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Ik snap iets niet goed....
Wat wil je nu precies? Lukt het inserten nu wel of niet, of wil je enkel weten wat de 'status' is van die insert? Maw, of die insert geslaagd is of niet?

https://fgheysels.github.io/


  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06-2025

mookie

Heerlijk Helder

Topicstarter
Inserten werkt prima.
Het mooiste vind ik nog dat ie geen dubbele records invoert.
Probleem is alleen dat de ado connectie zegt dat het statement keurig is uitgevoerd en daarom krijg ik geen errors.
Ik zou echter wel graag willen weten of het record is toegevoegd en zoniet dan graag waarom niet (zoals b.v. een dupe).

via de mysql prompt zie ik:
ERROR 1062: Duplicate entry 'ROW5' for key 2

lijkt me duidelijk dat wat ik probeer in te voeren als bestaat.
Ik wil dat via een ADO connectie ook graag terugvangen maar ik weet niet hoe en na 2 dagen zelf in MSDN en andere site zoeken hoopte ik dat iemand anders ook wel eens zoiets heeft willen doen.
Ik zag wel 1 vaag voorbeeldje hier in de search maar dat gaf niet echt een oplossing of een aanknopingspunt waar ik verder zou kunnen zoeken.

Ik zou graag de melding die ik in mysql op mijn scherm zie dus op kunnen vangen via de ADO connectie

mookie


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Als je geen error krijgt, dan mag je er vanuit gaan dat het record is ingevoegd.
Indien er wel een error (exception) gethrowed wordt, dan is er iets fout gegaan. De exceptie geeft meestal al de reden aan waarom het niet gelukt is, alleen, die boodschap is niet zo user-friendly.

https://fgheysels.github.io/


  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06-2025

mookie

Heerlijk Helder

Topicstarter
Ik weet ook wel of het goed gaat of niet.
Als ik een error krijg zie ik gewoon een algeme foutmelding en dan vind ik het al goed.
Ik wil alleen graag weten wat het uiteindelijke resultaat is van mijn querie en indien mogelijk waarom zoals b.v. wel goed uitgevoert, niets toegevoegd omdat het een dupe is.

mookie


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

misschien dat je hier iets aan hebt http://gathering.tweakers.net/forum/list_messages/706869

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


Verwijderd

Met auto increment kolommen moet je in die kolom geen waarde inserten, dus ook niet expliciet 'NOT NULL'. Met het volgende SQL statement zou alles volgens mij goed moeten gaan:
SQL:
1
2
3
4
insert into tabel1 
   (tabel_Description, tabel_inser ted, tabel_owner)
values 
   ('ROW5', NOW(), 1);


Verder verbaast het me dat er geen fout in de Error collecie van het Connection object is toegevoegd. De ADO Data Provider (OleDb of ODBC driver) is hiervoor verantwoordelijk, en kennelijk doet die van MySQL (MyODBC waarschijnlijk) het niet goed. Mijns inziens kun je daar niets aan doen.

HTH :)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Verwijderd schreef op 18 februari 2003 @ 10:12:
Verder verbaast het me dat er geen fout in de Error collecie van het Connection object is toegevoegd. De ADO Data Provider (OleDb of ODBC driver) is hiervoor verantwoordelijk, en kennelijk doet die van MySQL (MyODBC waarschijnlijk) het niet goed. Mijns inziens kun je daar niets aan doen.
Meer info over het Error object

Today's subliminal thought is:


  • mookie
  • Registratie: Juni 2002
  • Laatst online: 15-06-2025

mookie

Heerlijk Helder

Topicstarter
in reactie op devraux:

thnx voor de link, wel goeie info als ik mooie pagina's wil die een duidelijkere foutmelding geven. probleem is alleen dat er niets fout gaat

in reactie op MRx

ik heb dat SQL statement ff geprobeerd:

mysql> insert into tabel1 values(NOT NULL,'row6',NOW(),1);
Query OK, 1 row affected (0.07 sec)

mysql> insert into tabel1 values('row7',NOW(),1);
ERROR 1136: Column count doesn't match value count at row 1

Ik heb er nooit over nagedacht om geen NOT NULL mee te geven maar zonder parameter werkt het dus iets minder goed :o

Anyway:
het hele idee is dat als het SQL statement niet goed uitgevoert kan worden dan komt er 1 of meer foutmeldingen in de error collecties te staan.
Probleem nu voor mij is dus dat er geen problemen met het statement zijn.
Het wordt perfect uitgevoerd en dus is de error collectie leeg.

Ik heb wel zojuist uit een boek gelezen dat je dus het aantal rows affected kunt opvangen en daaruit kan ik opmaken op er een record is toegevoegd of niet.
Logisch kun je dan wel conluderen dat er wel of geen dupe is toegevoegd.

Echter zou ik indien mogelijk toch graag een soort van status terug krijgen van mij SQL statement zoals je die in dat tekst mysql ding ziet.

Iets als Query OK, 1 row affected (0.07 sec)

Als iemand weet hoe dan zou dat prettig zijn.
Verders gebruik ik geen DSN (dus geen MyODBC) om naar die DB server te connecten. Het gaat via een connectie string.

ziet er in ASP zo uit:
adoConn.Open "Driver={mySQL}; Server=localhost; Port=3306; Option=0; Socket=; Stmt=; Database=database_naam; Uid=het_account; Pwd=het_wachtwoord;"

als ik het via een DSN deed zag het stukje ASP er zo uit:
adoConn.Open "DSN=naam_van_de_dsn"

Misschien dat er via ODBC wel meer info terug gehaald kan worden .
Ik heb wel de 2.5 MyODBC driver geinstalleerd maar daar in de properties van een DSN kan ik daar ook niet specifiek iets invullen dat meer info zou moeten geven.

Alle tips zijn welkom...

mookie


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
[nohtml]
mookie schreef op 18 februari 2003 @ 18:05:

in reactie op MRx

ik heb dat SQL statement ff geprobeerd:

mysql> insert into tabel1 values(NOT NULL,'row6',NOW(),1);
Query OK, 1 row affected (0.07 sec)

mysql> insert into tabel1 values('row7',NOW(),1);
ERROR 1136: Column count doesn't match value count at row 1

Ik heb er nooit over nagedacht om geen NOT NULL mee te geven maar zonder parameter werkt het dus iets minder goed :o
DAt het zonder parameter minder goed werkt, is logisch als je ook niet opgeeft voor welke velden je een parameter insert.

Doe eens:
code:
1
2
INSERT INTO tabel1 ( tabel_description, tabel_inserted, tabel_owner) 
VALUES ( "description", date(), 1)
Anyway:
het hele idee is dat als het SQL statement niet goed uitgevoert kan worden dan komt er 1 of meer foutmeldingen in de error collecties te staan.
Probleem nu voor mij is dus dat er geen problemen met het statement zijn.
Het wordt perfect uitgevoerd en dus is de error collectie leeg.

Ik heb wel zojuist uit een boek gelezen dat je dus het aantal rows affected kunt opvangen en daaruit kan ik opmaken op er een record is toegevoegd of niet.
Logisch kun je dan wel conluderen dat er wel of geen dupe is toegevoegd.

Echter zou ik indien mogelijk toch graag een soort van status terug krijgen van mij SQL statement zoals je die in dat tekst mysql ding ziet.
Dat stuk zal je zelf moeten programmeren.

Bv:
code:
1
2
3
4
5
6
7
8
9
10
11
12
try
{
    doInsert();
    if( rowsInserted > 0 )
     {
        MessageBox.Show ("insert succesfull");
     }
}
catch( SqlException e)
{
   MessageBox.Show ("error occured: " + e.Message);
}

https://fgheysels.github.io/

Pagina: 1