Avatar billede set Nybegynder
03. juli 2008 - 10:21 Der er 10 kommentarer og
1 løsning

indsætte dato i en access database

Hej
Jeg har et lille problem med indsættelse af en dato i en accessdatabase.
Jeg bruger visual studio 2008 og C#.
Jeg vil f.eks. gerne indsætte dags dato noger der bliver lavet en ny record, så der kan sorteres i vilken dag data er indsat.
Kan måske laves om til en sql databse så hjælp dertil er også brugbart.
På forhånd mange tak
Avatar billede keysersoze Guru
03. juli 2008 - 10:29 #1
sæt standardværdien til now() direkte på kolonnen og undlad så at gøre mere i din sql.
Avatar billede aaberg Nybegynder
03. juli 2008 - 10:30 #2
Det er ikke noget problem at gemme datoer i Access. Du opretter bare en ny kolonne i databasen som er af typen dato/klokkeslæt. Når du indsætter i tabellen, skal du bare indsætte dato + tidspunkt i denne kolonne, dette kan du bruge funktionen Now() til.

Har du f.eks. en tabel med 3 kolonner (id, value, dato), skriver du.

insert into tbl(id, value, dato)
values(1, 'en værdi', Now())
Avatar billede aaberg Nybegynder
03. juli 2008 - 10:31 #3
keysersozes forslag er meget bedre end mit, så brug det :-)
Avatar billede set Nybegynder
03. juli 2008 - 20:46 #4
når jeg prøver at bruge flg. kode får jeg denne fejlmeddelelse:

Exception Details: System.Data.OleDb.OleDbException: Der er en syntaksfejl, fordi der mangler en operator. i forespørgselsudtrykket "03-07-2008 00:00:00".



        //** Indsættelse af data i DB **                       
        //Forbindelse til MS Access DB           
        string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("../App_Data/Safe.mdb");

        OleDbConnection objConn = new OleDbConnection(strCon);

        //Åben forbindelse til DB           
        objConn.Open();

        DateTime myDate = DateTime.Today;
        string dato = myDate.ToShortDateString();

        //Byg SQL streng og kald til DB   
        string strSQL = "INSERT INTO person (dato,svar,kode,fornavn,efternavn,adresse,nr,postnr,bynavn,telefon,mobil,boligform,gavekort)"
              +  "VALUES (" + myDate + ",@svar,@kode,@fornavn,@efternavn,@adresse,@nr,@postnr,@bynavn,@telefon,@mobil,@boligform,@gavekort)";
        OleDbCommand objCmd = new OleDbCommand(strSQL, objConn);
     
        //Indsættelse via parametre           
        objCmd.Parameters.AddWithValue("@svar", Label11.Text);
        objCmd.Parameters.AddWithValue("@kode", Label10.Text);
        objCmd.Parameters.AddWithValue("@fornavn", TextBox1.Text);
        objCmd.Parameters.AddWithValue("@efternavn", TextBox2.Text);
        objCmd.Parameters.AddWithValue("@adresse", TextBox3.Text);
        objCmd.Parameters.AddWithValue("@nr", TextBox4.Text);
        objCmd.Parameters.AddWithValue("@postnr", TextBox5.Text);
        objCmd.Parameters.AddWithValue("@bynavn", TextBox6.Text);
        objCmd.Parameters.AddWithValue("@telefon", TextBox7.Text);
        objCmd.Parameters.AddWithValue("@mobil", TextBox8.Text);
        objCmd.Parameters.AddWithValue("@boligform", RadioButtonList2.SelectedValue);
        objCmd.Parameters.AddWithValue("@gavekort", RadioButtonList1.SelectedValue);
       
        //Eksekver SQL streng           
        objCmd.ExecuteNonQuery();
       
        //Luk forbindelse til DB           
        objConn.Close();
       
        Response.Redirect("~/Gavekort/tak.aspx", true);



Jeg ved ikke hvor fejlen er, kan nogen hjælpe??
Avatar billede arne_v Ekspert
04. juli 2008 - 02:09 #5
Prøv:

        string strSQL = "INSERT INTO person (dato,svar,kode,fornavn,efternavn,adresse,nr,postnr,bynavn,telefon,mobil,boligform,gavekort)"
              +  "VALUES (@dato,@svar,@kode,@fornavn,@efternavn,@adresse,@nr,@postnr,@bynavn,@telefon,@mobil,@boligform,@gavekort)";

og

objCmd.Parameters.AddWithValue("@dato", myDate);
Avatar billede arne_v Ekspert
04. juli 2008 - 02:10 #6
Eller:

        string strSQL = "INSERT INTO person (dato,svar,kode,fornavn,efternavn,adresse,nr,postnr,bynavn,telefon,mobil,boligform,gavekort)"
              +  "VALUES (NOW(),@svar,@kode,@fornavn,@efternavn,@adresse,@nr,@postnr,@bynavn,@telefon,@mobil,@boligform,@gavekort)";
Avatar billede aaberg Nybegynder
04. juli 2008 - 08:07 #7
Hvis du gør som keysersoze siger, og sætter en default value på dato kolonnen til Now(), så skal du slet ikke have dato med i INSERT INTO querien!

string strSQL = "INSERT INTO person (svar,kode,fornavn,efternavn,adresse,nr,postnr,bynavn,telefon,mobil,boligform,gavekort)"
+ "VALUES(@svar,@kode,@fornavn,@efternavn,@adresse,@nr,@postnr,@bynavn,@telefon,@mobil,@boligform,@gavekort)";
Avatar billede set Nybegynder
04. juli 2008 - 14:09 #8
Arne V
now() kan ikke bruges i den sammenhæng du skriver, så kan der ikke kompileres.

Hvis jeg bruger dit første forslag får flg. fejlmeddelelse:

Exception Details: System.Data.OleDb.OleDbException: Datatyperne stemmer ikke overens i kriterieudtrykket.


aaberc cc

der må være en måde hvor man kan indsætte dato uden at skulle definere det i tabellen.
Avatar billede aaberg Nybegynder
04. juli 2008 - 14:15 #9
Fejlmeddelelsen du får med forslaget fra Arne v, er fordi datatypen i Access er forskellig fra datatypen i C# koden. Hvis kolonnen er af typen "dato og tid" i Access, skal myDate variablen være  af typen DateTime. Hvis datoen er skrevet med tekst i Access, skal myDate være en string.
Avatar billede set Nybegynder
14. juli 2008 - 23:43 #10
Unskyld ventetiden. Har fundet fejlen skulle bare lige sørge for at feltet i DB var af samme type.
Hvem vil have point??
Avatar billede aaberg Nybegynder
15. juli 2008 - 08:39 #11
svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester