begin process at 2012 05 27 14:38:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP.NET

 > 

Base de données

 > 

Access

 > 

accessdatasource insert qui ne fonctionne pas


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

accessdatasource insert qui ne fonctionne pas

mardi 17 mars 2009 à 23:35:00 | accessdatasource insert qui ne fonctionne pas

vandedan

Bonjour,

j'ai deux petits soucis avec un accessdatasource.insert.

Sur une page aspx, j'ai

un dropdownlist (populate par le contenu d'un champ "inspecteur"d'une table appelée "inspecteur")
un textbox
un bouton soumettre
un gridview (invisible) basé sur une table appelée "news" comprenant les champs "date_news", "inspecteur" et "texte_news"
un accessdatasource1 qui gère le dropdownlist
un accessdatasource2 qui gère le gridview et les commandes dont "insert"

le premier soucis est que je voudrais que le champ date_news soit rempli automatiquement avec la date et l'heure d'insertion
Le second soucis, c'est qu'après avoir consulter quelques codes sur ce site, je n'arrive toujours pas à faire l'insert.

C'est vraisemblablement une con... mais cette con... vient de me bouffer trois soirées...

Y aurait-il dans ce forum une bonne âme pour jeter un oeil sur le code ?
D'avance, un tout grand merci

Cordialement
Daniel

Voilà le code de la page

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="intronews.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<Script runat="server">
    Private Sub Insertnews(ByVal Source As Object, ByVal e As EventArgs)
        Dim datenews As Date
        datenews = Date.Now
        AccessDataSource2.Insert()
    End Sub ' Insertnews
</Script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link href="formats.css" rel="Stylesheet" type="text/css" />
    </head>
<body>
   
<table width="100%">
<tr>
    <td height="70px" valign="bottom">
    <img alt="header" src="header.gif" style="height: 37px; width: 602px" />
    <table border="1" cellpadding="0" cellspacing="0">
    <colgroup width="115px" span="5"></colgroup>
           <tr  >
               <td height="20px" align="center"><a href="intronews.aspx">Accueil</a></td>
               <td align="center">Données</td>
               <td align="center">Inspections</td>
               <td align="center">Recommendations</td>
               <td align="center">Màj Tables</td>
           </tr>
    </table>
    </td>
</tr>
<tr>
    <td>
    <table align="top" width="100%">
           <tr>
               <td width="110px" valign="top">
                <table>
                <tr>
                    <td><b>Menu Accueil</b><br /><br /></td>
                </tr>
                <tr>
                <td><a href="default.aspx">Voir les news</a></td>
                </tr>
                <tr>
                <td><a href="intronews.aspx">Envoyer une news</a></td>
                </tr>
                </table>
               </td>
              
               <td valign="top">
                   <br />
                   <br />
                   <form id="form1" runat="server">
                   Inspecteur :
                   <asp:DropDownList ID="DropDownList1" runat="server"
                       DataSourceID="AccessDataSource1" DataTextField="inspecteur"
                       DataValueField="inspecteur" Height="19px" Width="148px">
                   </asp:DropDownList>
                   <asp:AccessDataSource ID="AccessDataSource1" runat="server"
                       DataFile="~/App_Data/idems.mdb"
                       SelectCommand="SELECT [inspecteur] FROM [inspecteur]">
                   </asp:AccessDataSource>
                   <br />
                   News :
                   <asp:TextBox ID="TextBox1" runat="server" Height="100px" TextMode="MultiLine"
                       Width="100%"></asp:TextBox>
                   <br />
                   <asp:Button ID="Button1" runat="server" Text="Envoyer"
                       PostBackUrl="default.aspx" OnClick="Insertnews" />
                   <br />
                   <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                       DataKeyNames="date_news" DataSourceID="AccessDataSource2" Visible="false">
                       <Columns>
                           <asp:BoundField DataField="date_news" HeaderText="date_news" 
                             ReadOnly="True"  SortExpression="date_news" />
                           <asp:BoundField DataField="inspecteur" HeaderText="inspecteur"
                               SortExpression="inspecteur" />
                           <asp:BoundField DataField="texte_news" HeaderText="texte_news"
                               SortExpression="texte_news" />
                       </Columns>
                   </asp:GridView>
                   <asp:AccessDataSource ID="AccessDataSource2" runat="server"
                       DataFile="~/App_Data/idems.mdb"
                       DeleteCommand="DELETE FROM [news] WHERE (([date_news] = ?) OR ([date_news] IS NULL AND ? IS NULL))"
                       InsertCommand="INSERT INTO [news] ([date_news], [inspecteur], [texte_news]) VALUES (datenews, @inspecteur, @texte_news)"
                       SelectCommand="SELECT [date_news], [inspecteur], [texte_news] FROM [news]"
                       UpdateCommand="UPDATE [news] SET [inspecteur] = ?, [texte_news] = ? WHERE (([date_news] = ?) OR ([date_news] IS NULL AND ? IS NULL))">
                       <DeleteParameters>
                           <asp:Parameter Name="date_news" Type="DateTime" />
                       </DeleteParameters>
                       <UpdateParameters>
                           <asp:formParameter Name="inspecteur" FormField="dropdownlist1" type="String"/>
                           <asp:Parameter Name="texte_news"  Type="String" />
                           <asp:Parameter Name="date_news"  Type="DateTime" />
                       </UpdateParameters>
                       <InsertParameters>
                           <asp:Parameter Name="date_news" DefaultValue="(new)" Type="DateTime" />
                           <asp:Parameter Name="inspecteur" DefaultValue="(new)"  Type="String" />
                           <asp:Parameter Name="texte_news" DefaultValue="(new)"  Type="String" />
                       </InsertParameters>
                   </asp:AccessDataSource>
                   </form>
                   <br />
               </td>
           </tr>
    </table>
    </td>
</tr>
</table>
   
</body>
</html>


mercredi 18 mars 2009 à 01:36:12 | Re : accessdatasource insert qui ne fonctionne pas

ggtry

Réponse acceptée !
Bonsoir,

Oui, apparemment, tu as essayé plusieurs solutions... Mais tu n'as pas de variable liées dans ton datasource (et tes déclarations, sur l'insert, ne sont d'ailleurs pas valides pour un AccessDataSource).
Puisque l'insert semble déclenché sur le click du button, tu peux définir ton insertcommand lors du onclick. Ici, un exemple bête (mais attention, la requête n'est pas paramétrée, donc il y a possibilité d'injection ; c'est juste une piste) :

Dim sqlins As String
sqlins ="INSERT INTO [news] ([date_news], [inspecteur], [texte_news]) VALUES ("
sqlins &= DateTime.Now.Date & ", " & DropDownList1.SelectedValue & " , '" & TextBox1.Text & "')" 
AccessDataSource2.InsertCommand = sqlins
AccessDataSource2.Insert()

Ca doit aussi pouvoir se faire simplement en déclaration asp.

GGtry
mercredi 18 mars 2009 à 09:41:04 | Re : accessdatasource insert qui ne fonctionne pas

vandedan

Bonjour GGtry,

merci pour la réponse. 
Ce qui me parait un peu bizarre, c'est qu'il y aurait lieu de redéfinir la chaîne d'insertion (que tu as appelée sqlins) mais alors, je ne comprends pas à quoi sert l'insert command dans le <asp:accessdatasource mais bon, Microsoft...

cela voudrait il dire aussi que dans la commande insert de mon datasource (sous <asp:accessdatasource, je dois virer les @inspecteur, @text_news etc et remettre les points d'interrogations originaux ?

Je vais essayer cela ce soir en rentrant du boulot.  J'espère que cela marchera. 

Encore un tout grand merci pour ton aide

Daniel
mercredi 18 mars 2009 à 11:39:07 | Re : accessdatasource insert qui ne fonctionne pas

ggtry

Réponse acceptée !
Bonjour,

En fait, le passage par le code vb est surtout pour la date.
Pour le faire directement dans le code asp, tu dois en effet remplacer tes noms de variable par des points d'interrogation.
<asp:AccessDataSource ID="AccessDataSource2" ... etc. ...                      InsertCommand="INSERT INTO [news] ([date_news], [inspecteur], [texte_news]) VALUES (?, ?, ?)" ... etc. ... >
Puis tu dois définir tes insertparameters, mais comme controlparameters pour tes deux derniers champs, en définissant dans le même ordre que tes champs quels sont les contrôles qui alimentent chaque champ :
<InsertParameters>
                <asp:ControlParameter ControlID="DropDownList1" Name="?" PropertyName="SelectedValue" />
                <asp:ControlParameter ControlID="TextBox1" Name="?" PropertyName="Text" />
            </InsertParameters>
Le problème ici est pour la date, car je ne sais pas comment passer datetime.now directement dans un parameter (d'où le code vb dans le premier exemple).
Une solution serait de supprimer date_news de ton insert et de définir le champ de date, dans ta bdd access avec une valeur par défaut à date(). De la sorte, la date s'insérera automatiquement lors de l'insert, sans que tu ais besoin de la préciser dans ton code asp.
C'est probablement mieux.
(à propos, pourquoi mets-tu un gridview invisible ? si tu ne l'affiches jamais, tu peux le supprimer et garder seulement ton accessdatasource. L'insert se fera aussi bien).

GGtry
mercredi 18 mars 2009 à 22:32:45 | Re : accessdatasource insert qui ne fonctionne pas

vandedan

re-

j'ai fait divers tests sur base des codes fournis, ce qui semble aller le mieux est ce code :

Private Sub Insertnews(ByVal Source As Object, ByVal e As EventArgs)
        Dim sqlins As String
         sqlins = "INSERT INTO [news] ([date_news], [inspecteur], [texte_news]) VALUES ("&Date.Now &" , " & DropDownList1.SelectedValue & ", " & TextBox1.Text & ")"
        AccessDataSource2.InsertCommand = sqlins
        AccessDataSource2.Insert()
    End Sub ' Insertnews

je dis mieux car j'ai toujours le problème de date, que j'essaye de passer l'argument par une variable  ou comme indiqué ci-dessus avec date.now, datetime.now ou datetime.now.date.

J'obtiens toujours cette erreur :

System.Data.OleDb.OleDbException was unhandled by user code
  ErrorCode=-2147217900
  Message="Syntax error (missing operator) in query expression '18/03/2009 22:23:30'."
  Source="Microsoft JET Database Engine"
  StackTrace:
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
       at System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand command, DataSourceOperation operation)
       at System.Web.UI.WebControls.SqlDataSourceView.ExecuteInsert(IDictionary values)
       at System.Web.UI.WebControls.SqlDataSource.Insert()
       at ASP.intronews2_aspx.Insertnews(Object Source, EventArgs e) in d:\basic web site\intronews2.aspx:line 11
       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException:

J'ai aussi essayé avec date auto - date() comme date par défaut dans la base de données mais là aussi problème. j'ai essayé plusieurs trucs et au dernier essai, j'ai mis ce code, me disant que si la date était automatique, je n'avais pas à l'inclure dans le insertcommand string : 

Private Sub Insertnews(ByVal Source As Object, ByVal e As EventArgs)
        Dim sqlins As String
         sqlins = "INSERT INTO [news] ([inspecteur], [texte_news]) VALUES (" & DropDownList1.SelectedValue & ", " & TextBox1.Text & ")"
        AccessDataSource2.InsertCommand = sqlins
        AccessDataSource2.Insert()
    End Sub ' Insertnews

et là, rebelote, nouvel erreur :

System.Data.OleDb.OleDbException was unhandled by user code
  ErrorCode=-2147217900
  Message="Syntax error (missing operator) in query expression 'Dupont'."
  Source="Microsoft JET Database Engine"
  StackTrace:
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
       at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
       at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
       at System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand command, DataSourceOperation operation)
       at System.Web.UI.WebControls.SqlDataSourceView.ExecuteInsert(IDictionary values)
       at System.Web.UI.WebControls.SqlDataSource.Insert()
       at ASP.intronews2_aspx.Insertnews(Object Source, EventArgs e) in d:\basic web site\intronews2.aspx:line 11
       at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
       at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
       at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException:

Je suis de plus en plus perplexe...

bien cordialement et merci pour votre aide

Daniel
mercredi 18 mars 2009 à 22:56:27 | Re : accessdatasource insert qui ne fonctionne pas

ggtry

Réponse acceptée !

Bonsoir,

Ma dernière suggestion consistait à utiliser le pur code asp, donc de ne pas utiliser le code vb donné au début : utilise plutôt les insertparameters. Cela sera plus simple.

Cela dit, dans le code que tu donnes vb à la fin, tu as :
... VALUES (" & DropDownList1.SelectedValue & ", " & etc.

Ce qui est en rouge doit bien entendu être supprimé.

Si tu n'y arrives pas, je peux t'envoyer un exemplet complet de code.

GGtry

mercredi 18 mars 2009 à 23:42:38 | Re : accessdatasource insert qui ne fonctionne pas

vandedan

Re-bonsoir,

ca code dur ce soir, j'ai trouvé une solution qui fonctionne avec autodate dans la base access comme suggéré par GGtry.  UN GRAND MERCI A LUI !
je met le code ci-dessous pour tout le monde MAIS car il y a un mais (voir plus bas après le code)

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="intronews.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<Script runat="server">
    Private Sub Insertnews(ByVal Source As Object, ByVal e As EventArgs)
        Dim sqlins As String
        sqlins = "INSERT INTO [news] ([inspecteur], [texte_news] ) VALUES (drop,box)"
        AccessDataSource2.InsertCommand = sqlins
        AccessDataSource2.Insert()
        TextBox1.Text=" "
        DropDownList1.ClearSelection
        End Sub ' Insertnews
</Script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link href="formats.css" rel="Stylesheet" type="text/css" />
    </head>
<body>
   
<table width="100%">
<tr>
    <td height="70px" valign="bottom">
    <img alt="header" src="header.gif" style="height: 37px; width: 602px" />
    <table border="1" cellpadding="0" cellspacing="0">
    <colgroup width="115px" span="5"></colgroup>
           <tr  >
               <td height="20px" align="center"><a href="default.aspx">Accueil</a></td>
               <td align="center">Données Del</td>
               <td align="center">Inspections</td>
               <td align="center">Recommendations</td>
               <td align="center">Màj Tables</td>
           </tr>
    </table>
    </td>
</tr>
<tr>
    <td>
    <table align="top" width="100%">
           <tr>
               <td width="110px" valign="top">
                <table>
                <tr>
                    <td><b>Menu Accueil</b><br /><br /></td>
                </tr>
                <tr>
                <td><a href="default.aspx">Voir les news</a></td>
                </tr>
                <tr>
                <td><a href="intronews.aspx">Envoyer une news</a></td>
                </tr>
                </table>
               </td>
              
               <td valign="top">
                   <br />
                   <br />
                   <form id="form1" runat="server">
                   Inspecteur :
                   <asp:DropDownList ID="DropDownList1" runat="server"
                       DataSourceID="AccessDataSource1" DataTextField="inspecteur"
                       DataValueField="inspecteur" Height="19px" Width="148px">
                   </asp:DropDownList>
                   <asp:AccessDataSource ID="AccessDataSource1" runat="server"
                       DataFile="~/App_Data/idems.mdb"
                       SelectCommand="SELECT [inspecteur] FROM [inspecteur]">
                   </asp:AccessDataSource>
                   <br />
                   News :
                   <asp:TextBox ID="TextBox1" runat="server" Height="100px" TextMode="MultiLine"
                       Width="100%"></asp:TextBox>
                   <br />
                   <asp:Button ID="Button1" runat="server" Text="Envoyer"
                        OnClick="Insertnews"  />
                   <br />
                   <asp:AccessDataSource ID="AccessDataSource2" runat="server"
                       DataFile="~/App_Data/idems.mdb"
                       SelectCommand="SELECT [inspecteur], [texte_news], [date_news] FROM [news]">
                   <InsertParameters>
                         <asp:ControlParameter ControlID="DropDownList1" Name="drop" PropertyName="SelectedValue" />
                         <asp:ControlParameter ControlID="TextBox1" Name="box" PropertyName="Text" />
                   </InsertParameters>
                   </asp:AccessDataSource>
                   </form>
                   <br />
               </td>
           </tr>
    </table>
    </td>
</tr>
</table>
</body>
</html>

MAIS, si par malheur, on met dans le button le code postbackurl=default.aspx pour revenir à la page initiale après le click, on revient bien à la page default.aspx mais la base de données n'est pas mise à jour ! Comique cela

une idée du code à mettre dans la private sub ? ou alors, ce n'est pas possible ?

cordialement

Daniel
jeudi 19 mars 2009 à 00:40:37 | Re : accessdatasource insert qui ne fonctionne pas

ggtry

Réponse acceptée !

rebonsoir,

Non, c'est parfaitement normal : un postbackurl sert à faire un postback, mais sur une autre page. Autrement dit, tu transfères le traitement de code sur une page qui a un autre url que ta première page, mais dans laquelle tu peux récupérer néanmoins les renseignements de la première page, au niveau du serveur.
Le postbackurl empêche donc ton button_click d'être activé, puisque tu passes la main, pour le code, à une autre page (plus clairement, le postback ne renvoie plus à la même page, mais à la nouvelle page, et donc ignore le code de la page précédente).

Dans ton cas, il ne paraît pas que tu aies besoin d'un postbackurl : donc, tu peux plutôt, dans ton sub insertnews, après l'insert, faire un response.redirect vers ta page default.aspx.

GGtry

jeudi 19 mars 2009 à 20:09:15 | Re : accessdatasource insert qui ne fonctionne pas

vandedan

Bonsoir GGtry,

super, ca marche, je vais pouvoir continuer ma petite application.

Bien cordialement et encore merci pour ton aide.

Daniel


Cette discussion est classée dans : insert, date, texte, news, inspecteur


Répondre à ce message

Sujets en rapport avec ce message

Problème de date [ par thedentiste ] Comment transformer une variable texte egale à 21/05/01 en variable date.J'ai contruis la variable texte comme se sidatenais=jour&"/"&mois&"/"&anneejo HELP!Recuperer une variable de type DATE!! [ par nomed ] Bonjour à tous,J'ai un grave problème, et j'espère que quelqu'un ici à la solution.J'essai de recuperer une chaîne de caractère et de l'implementer da problème requete SQL insert [ par lenneth666 ] heu voila alors dans une texte box, une personne doi saisir une date (jj/mm/aaaa) et dans une autre texte box, une heure ex : 14:00 et qd je concatèn recuperer valeur texte box [ par battit64 ] bonjour je souhaite recuperer le resultat d'un requete an ASP .Netdim date1 as stringdate1 = AccessDataSource2.SelectCommand = " SELECT [id_date Modifier un champ texte en date ds une requete SQL Access. [ par djew ] Salut les génies,J'ai à faire à une base de données plutot mal faite, je m'explique:J'ai un champ de type texte ds lequel ils ont stocké des dates.J'a Mettre à jour des champs à partir d'une zone de texte [ par Reloaded49 ] Bonjour, J'aurais aimé savoir si il est possible sous access de mettre à jour les champs d'une table à partir d'une zone de texte située dans un état. insertion de la date dans un champs texte ds une page jsp [ par reseau210 ] Salut tout le monde ,je travaille sur une page jsp et je veux inserer la date système dans un champs texte en cliquant sur un bouton, comment faire? Récupérer le Format d'une date pour un pays [ par sspizer ] Bonjour, J'aimerais récupérer le format de la date de type "dd/MM/yyyy" en fonction du pays et ou de la machine. J'arrive à avoir le format actuelle d Création de Bitmap [ par Urda ] Bonjour à tous , Je viens vers vous car j'ai un problème que je n'arrive pas à résoudre , j'ai sur ma page 3 images que j'ai créer dynamiquement avec


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,030 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales