IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Insert dans base Access qui ne se fait pas, mais sans erreur


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut Insert dans base Access qui ne se fait pas, mais sans erreur
    Bonjour,
    Je sèche depuis 2 jours sur ce code qui devrait ajouter un enregistrement dans une base access, mais qui ne le fait pas, sans me renvoyer d'erreur. Après avoir essayer plusieurs formules, je n'y arrive toujours pas. Si vous avez une idée ...


    C'est la fonction AjouteLigne qui me pose un problème. Tout le reste fonctionne bien, mais celle là

    Voici ma partie Javascript qui contient les déclarations etc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    	<script language="JavaScript">
     
    		window.resizeTo(1024,768);
     
    		function showFilled(Value) 
    		{ 	return (Value > 9) ? "" + Value : "0" + Value;
    		}
     
    		// setInterval ( "doSomething()", 5000 );
     
    		var adOpenUnspecified = -1; adOpenForwardOnly = 0; adOpenKeyset = 1; adOpenDynamic = 2; adOpenStatic = 3;
    		var adLockUnspecified = -1; adLockReadOnly = 1; adLockPessimistic = 2; adLockOptimistic = 3; adLockBatchOptimistic = 4; 
     
    		var dat = new Date();
    		var tabJours = new Array ("dimanche", "lundi", "mardi","mercredi", "jeudi", "vendredi", "samedi");
    		var tabMois = new Array("janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre");
     
    		var conn = new ActiveXObject("ADODB.Connection");
    		conn.open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=inventaire.mdb;Persist Security Info=False");
    		if (conn) 
    		{	var rs = new ActiveXObject("ADODB.Recordset");	
    			var sqlString = "DELETE * FROM import_AD;";
    			rs.Open(sqlString , conn, adOpenUnspecified, adLockUnspecified);
    			if (!rs) 
    			{	alert ("Erreur lors de l'initialisation de la table d'import."); }
    		}
    		else { alert ("Impossible de se connecter à la base pour effectuer les mises à jour"); }
     
    		function AjouteMachine (nomClass, nomMachine)
    		{	var sqlString = "INSERT INTO import_AD ( Type, Machines ) SELECT \"" + nomClass + "\" AS Expr1, \"" + nomMachine + "\" AS Expr2;"
    			rs.Open(sqlString , conn, adOpenUnspecified, adLockUnspecified);
    			if (!rs) 
    			{	alert ("Erreur lors de l'ajout de la machine " + nomMachine); }
    		}
     
    		function AjouteLigne (NumScan, Zone, TypeZone, Valeur1, Valeur2)
    		{	var sqlString = "INSERT INTO import ( IDScan, Type, P1, P2, P3 ) SELECT " + NumScan + " AS Expr1, \"" + TypeZone + "\" AS Expr2, \"" + Zone + "\" AS Expr3 ";
    			sqlString = sqlString + ", \"" + Valeur1 + "\" AS Expr4, \"" + Valeur2 + "\" AS Expr5;";
    			// alert (sqlString);
    			rs.Open (sqlString , conn, adOpenUnspecified, adLockUnspecified);
    			alert (Err.Number);
    			if (!rs) 
    			{	alert ("Erreur ajout ligne " + sqlString); 
    			}
    		}
     
    		function InitScan (Machine)
    		{	sqlString = "INSERT INTO Scans (Machine) SELECT \"" + Machine + "\" AS Expr1;";
    			rs.Open(sqlString , conn, adOpenUnspecified, adLockUnspecified);
    			if (rs) 
    			{	sqlString = sqlString = "SELECT TOP 1 IDScan FROM Scans WHERE (((Scans.Machine)=\"" + Machine + "\")) ORDER BY Scans.IDScan DESC;";
    				rs.Open(sqlString , conn, adOpenUnspecified, adLockUnspecified);
    				if (rs)
    				{	return rs.fields("IDScan").Value;
    				}
    				else
    				{	alert ("Erreur lors de la récupération de l'ID du scan " + Machine); 
    					return 0;
    				}
    			}
    			else
    			{	alert ("Erreur lors de l'initialisation du scan " + Machine); 
    				return 0;
    			}
    		}
     
     
    	</script>

  2. #2
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    fait un alert apres
    conn = new ActiveXObject("ADODB.Connection");
    !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    En fait je sais que le conn est bon parce que je lance la fonction InitScan avant celle qui me pose un problème.
    J'ai donc bien la connexion vers ma base

    Merci quand même.

  4. #4
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    Bonjour

    1- la syntaxe de tes requetes me laisse perplexe ("insert into ... select ...").Pourquoi ne pas utiliser la syntawe "classique" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         INSERT INTO MATABLE (...) VALUES (...)
    (je suis même surpris qu'access admette cette syntaxe.)

    2- L'utilisation d'un recordset pour un insert ne s'impose pas. Utilises plutot un objet ADODB.command

    3- Bien-sûr, les remarques habituelles : "on ne se connecte pas à une BdD en javascript, et gnagnagna..." (ce qui est faux) : Ton script peut marcher (sous IE only, activeX oblige ...) , mais ne peut être utilisé dans le cas d'une utilisation web.


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci Roro06 (06 ... à priori on doit être voisin !)

    En fait je suis meilleur (ou moins mauvais ) en Access qu'en sql. J'utilise donc le mode interactif de construction des requêtes dans Access et je copie ensuite le sql généré dans mon code.
    OK pour utiliser une autre syntaxe mais si je l'ai fait comme ça, c'est que c'est ce qu'Access m'a généré en premier lieu.

    Bien noté pour ADODB.command, je vais tester ça pour toutes les MAJ, Insert, DELETE etc

    Sinon je suis au courant pour les problématique javascript. L'appli que je développe est une HTML application, donc exclusivement interne, et seulement IE est déployé dans la maison. Ca devrait donc aller d'un point de vue sécu

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Roro06,
    Aurais-tu un exemple du lancement simple d'une requête delete * from import par exemple.
    Sur ce que je trouve sur le net pour le moment, j'ai l'impression qu'il faut quand même déclaré un recordset pour récupérer le résultat ?

    Donc je n'ai peut-être pas compris ce que tu préconisais.

    D'avance merci


    M

  7. #7
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Points : 1 978
    Points
    1 978
    Par défaut
    re

    Si c'est Access qui t'as généré la requête comme ça, considérons que je n'ai rien dit (une version plus récente que celles que j'ai l'habitude d'utiliser, probablement).

    Pour récupérer le résultat (mais cela s'impose t-il pour un insert ?), un recordset s'impose effectivement.
    Donc ton problème ne viens pas de là.

    Par contre, ton test est erroné :
    Tu testes ici l'existence de l'objet rs... qui a été instancié juste avant ! Utilises plutôt (pas le chien) : C'est quoi, Err ? Utilises plutôt un bloc try catch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    var sqlString = "INSERT INTO import ( IDScan, Type, P1, P2, P3 ) SELECT " + NumScan + " AS Expr1, \"" + TypeZone + "\" AS Expr2, \"" + Zone + "\" AS Expr3 ";
                sqlString = sqlString + ", \"" + Valeur1 + "\" AS Expr4, \"" + Valeur2 + "\" AS Expr5;";
                // alert (sqlString);
    var rs=new ActiveXObject("ADODB.Recordset");
    try {            
    rs.Open (sqlString , conn, adOpenUnspecified, adLockUnspecified);
    }
    catch(e)      
          {    
         alert ("Erreur ajout ligne " + sqlString); 
         alert(e.description);
           }
    delete rs;
    rs=null;
    (06 ... à priori on doit être voisin !)
    oui (mes amitiés à Albert)


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci, je vais tester ça la semaine prochaine.

    Pour info ma version d'Access est la 2002.

    Je ne manquerai pas de faire un coucou à Bébert mais je remets du bleu avec le blanc et le rouge pour rentrer à la maison le soir !!!

    Merci beaucoup en tout cas


    M

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci, ça marche Nickel. J'en ai fait une fonction, comme ça ça doit ralentir un peu mais je n'ai pas besoin de déclarer 50 fois les variables.

    Par contre, je n'ai pas tout compris sur le try catch et en particulier la manière de gérer le else et le passage des instructions s'il n'y a pas d'erreur.

    Je vais fouiller sur internet pour voir !

    Merci beaucoup.

    M.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-97] Base ACCESS qui ne s'ouvre pas
    Par Milyshyn76 dans le forum Sécurité
    Réponses: 10
    Dernier message: 19/09/2011, 14h12
  2. [MySQL] Script php avec insertion dans base de données qui s'arrête tout seul
    Par tofito dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 04/12/2008, 21h39
  3. Problème insertion date dans base Access
    Par pep972 dans le forum JDBC
    Réponses: 2
    Dernier message: 13/06/2008, 11h15
  4. Probleme insertion données dans base ACCESS
    Par Ice-tea dans le forum SGBD
    Réponses: 7
    Dernier message: 20/08/2007, 14h38
  5. [VB.NET]Requete INSERT dans base de données access
    Par mael94420 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/10/2006, 13h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo