Gå til innhold

Anbefalte innlegg

Hei!

 

Har slitt litt med en SQL-spørring mot Access-database de siste dagene, så jeg trenger sårt litt hjelp for å komme meg videre..

 

I access-databasen min har jeg et datoformat dd.MM.yyyy HH:mm og jeg skulle gjerne ha hatt en spørring som dette;

 

string query = "SELECT * FROM LEVERTVARE WHERE Tidspkt > " + dateTimePicker1.Value.ToString() + " AND ´Tidspkt´ < " + dateTimePicker2.Value.ToString() + " ";

 

Her er hele koden:

private void button1_Click(object sender, EventArgs e)
       {

           string query = "SELECT * FROM LEVERTVARE WHERE Tidspkt > " + dateTimePicker1.Value.ToString() + " AND ´Tidspkt´ < " + dateTimePicker2.Value.ToString() + " ";
           OleDbConnection Con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Access\LEVERTVARE.mdb;Jet OLEDB:Database Password=PW;");

           OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, Con);

           DataSet dSet = new DataSet();
           dAdapter.Fill(dSet);

           DataGridView grid = new DataGridView();
           BindingSource bSource = new BindingSource();

           bSource.DataSource = dSet;

           exportToExcel(dSet, @"C:\LEVERTVARE.xls");

       }

 

 

Resultatet skal lagres i et dataset og videre til gridView.

Feilen oppstår da dataene skal inn i dataset, med meldingen:

 

Syntax error (missing operator) in query expression 'Tidspkt > 15.11.2008 09:58:45 AND ´Tidspkt´ < 15.11.2010 09:58:45'.
Lenke til kommentar
Videoannonse
Annonse

string query = "SELECT * FROM LEVERTVARE WHERE Tidspkt > " + dateTimePicker1.Value.ToString() + " AND ´Tidspkt´ < " + dateTimePicker2.Value.ToString() + " ";

 

Hei, et skudd i blinde men prøver alikevel ;-)

Har du prøvd å fjerne apostrofene rundt Tidspunkt i spørringen din, regner med at det er navnet på en kolonne i tabellen din og det skal vel stå i klartekst.

 

Ellers så er ikke datoformaten i access det ultimate etter min erfaring men prøv å formatere dato i datetimepicker så det harmonerer med det som du har lagret i basen

 

hilsen Knut

Endret av Icaro2
Lenke til kommentar

Datoen skal ikke være i apostroffer da? Lenge siden jeg har gjort databasespørringer på den måten...

 

 

He, he

det skal ikke brukes apostrofer nei, så at dreamastr hadde brukt det og klippet ut setningen som han/hun hadde brukt med apostrofer.

Et spørsmål på siden av det trådstarter har men av samme tema.

Er det bedre å bruke Between mellom 2 datoer? ser at strengen blir kortere men har det ellers noen praktisk betydning? (hmm! between tar med seg startdato som utgangspunkt mens > går dagen etter startdato men la oss si at det brukes >= og <=)

 

hilsen Knut

Lenke til kommentar

GeirGrusom: Fikk hjelp fra et annet forum, og det førte meg til en annen feil :/

Skal ikke ha apostrofer, men # rundt dato i OleDB ( ikke det samme som med SQL).

 

string query = "SELECT * FROM " + (string)comboBox1.SelectedItem + " WHERE DATO > #" + dateTimePicker1.Value.ToString() + "# AND DATO < #" + dateTimePicker2.Value.ToString() +"# ";
           OleDbConnection Con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Data\Access\" + (string)comboBox1.SelectedItem + ".mdb;" + sb.ToString() + "");
           try
           {

               OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, Con);
               OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(dAdapter);
               DataSet dSet = new DataSet();
               dAdapter.Fill(dSet);

               BindingSource bSource = new BindingSource();

               bSource.DataSource = dSet;
               exportToExcel(dSet, @"C:\ " + comboBox1.SelectedValue.ToString() + ".xls");
           }
           catch (Exception ex)
           {
               textBox1.Text = ex.ToString();
               //MessageBox.Show(ex.ToString(), "FEIL!", MessageBoxButtons.OK, MessageBoxIcon.Warning);

           }

 

Får nå en feil som ser slik ut;

 

System.Data.OleDb.OleDbException: Syntax error in date in query expression 'DATO > #17.11.2010 19:29:15# AND DATO < #17.11.2010 19:29:15#'.

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.ExecuteReader(CommandBehavior behavior)

at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)

at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)

at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)

at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)

at Save_N_Delete.Form1.button1_Click(Object sender, EventArgs e) in C:\Data\Lagre_Slette\Save_N_Delete\Save_N_Delete\Form1.cs:line 44

 

Så jeg vet ikke om jeg må benytte meg av OleDbParam og dens formatering eller hva.. Sliter litt med den her altså.. At dem ikke kan benytte SQL fra starten av på slike ting!!

Endret av dreamastr
Lenke til kommentar

Tipper feilen er at DateTimen din ikke blir formatert på en korrekt måte. Den skal mest sannsynlig være slik: #2010-11-19 14:25:53#

 

Hvis du bruker OleDbParameter, så slipper du også mest sannsynlig å tenke på slike ting. Det er dessuten best practice å bruke parametere for å hindre blant annet sql injection osv.

Lenke til kommentar
  • 2 uker senere...
  • 2 måneder senere...

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...