Hej! > där datumfältet ser ut som följande: 'yyyy-mm-dd' Hej! Hej! Naturligtvis spelar det roll. :) OK! Ibland kan det till och med vara en fördel att inte ha specifik kunskap om språket eller tekniken. Då kan man se saker som man annars lätt tar för givet. :) TACK ! Ett fält har ingen längd, dock maxlängd: MaxLength. Vist men .... Hej! Kör mot en Access 2.5 (kan inte byta som huvudapplikationen är skriven i vb3) *Nyfiken* Testade du att ändra typen, och i så fall hur gick det? Hej! Hej!Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Har kod enligt nedan. Fungerar bra tills jag läger till parameter för fältet Datum.
När jag gör det så blir det fel vid 'ExecuteNonQuery()' . Felmeddelandet blir:
'Typblandningsfel i villkorsuttryck.' Försöker att lägga till posten i en Access 2.5
där datumfältet ser ut som följande: 'yyyy-mm-dd'. Fälttypen var värdet 8 och
längden 8.
Har provat att byta OleDbType.DBDate till andra värden men ej lyckats.
Skulle vara tacksam om någon kunde ge något tips vad det kan vara.
MVH
Peter
-------------------------------------------------------------------------------------------
insertCmd = "Insert Into [" + _Table + "] (Datum,Kod) values (?,?)";
mCommand = new OleDbCommand(insertCmd, Con);
mCommand.Parameters.Add(new OleDbParameter("Kod",OleDbType.Char,20,"Kod"));
mCommand.Parameters.Add(new OleDbParameter("Datum",OleDbType.DBDate ));//,8,"Datum"));
mCommand.Parameters["Datum"].IsNullable = true;
mCommand.Parameters["Datum"].Value = DBNull.Value;
if (_Kod == "") mCommand.Parameters["Kod"].Value = DBNull.Value;
else mCommand.Parameters["Kod"].Value = _Kod;
mCommand.Parameters["Datum"].Value = DBNull.Value;
Con.Open();
int RowsAffected = mCommand.ExecuteNonQuery();
Con.Close();Sv: Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Sparar du datumet som text? Då ska du ju inte använda datum som typ på parametern. Det kommer ju inte att ge en sträng i frågan, utan ett datum.
Bäst är förstås att lagra datum som datum, inte som text.Sv:Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Nej, datumet sparas i datumformat.Sv: Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Inte alls mitt område, men jag försöker... :-)
I INSERT anger du att du ska lägga in först Datum sen Kod (se nedan).
<b>"Insert Into [" + _Table + "] (Datum,Kod) values (?,?)"</b>
Sedan kör du Add på Parametrerna, men där lägger du till Kod först och sen Datum (se nedan).
<b>mCommand.Parameters.Add(new OleDbParameter("Kod",OleDbType.Char,20,"Kod"));
mCommand.Parameters.Add(new OleDbParameter("Datum",OleDbType.DBDate ));//,8,"Datum"));</b>
Kan detta spela roll??
//HåkanSv:Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Jag sitter med SQL Server och använder namngivna parametrar, så jag tänkte inte på det ens. :PSv: Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Hoppas det löser hans problem.
Sitter själv med VC++, OLE DB och MS SQL SERVER.
Vissa delar av koden ovan påminner/liknar det jag håller på med.
Man utvecklar en magkänsla för saker och ting, även om man inte är kan språket/syntaxen.
//HåkanSv:Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Sv: Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Ändrade på ordningen och då fungera det!
I min jakt på att lösa problemet så försökte jag hitta fältets typ
och längd genom att öppna tabellen i ett DataSet och därefter
loop igenom samtliga Columner och skriva inställningarna.
I snurran skrev jag bland annat följande:
Debug.Write("DataType = " + ds.Tables[0].Columns[c].DataType.ToString() + "\n");
Men hur gör man för att skriva ut fältets längd. Inte för att det
längre har någon praktisk betydelse men skulle ändå vilja veta.
MVH
PeterSv:Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Sv: Typblandningsfel i villkorsuttryck! OleDbType.DBDate
När jag lägger till tiden i kolumnen Tid (som är i datumformat) så sparas dagens
datum och inte tiden. Vad gör jag för fel? Har provat att låta _Tid både vara ett
DateTime objekt och en sträng. Utdrag från koden (bara lösa delar):
public string Tid
{
get
{
return _Tid;
}
set
{
DateTime dt = new DateTime();
dt = DateTime.Parse(value);
_Tid = dt.TimeOfDay.ToString();
}
**************************************************
mCommand.Parameters.Add(new OleDbParameter("Tid",OleDbType.DBDate));
mCommand.Parameters["Tid"].IsNullable = true;
mCommand.Parameters["Tid"].Value = DBNull.Value;
//VISAR KORREKT VÄRDE (TID)
Debug.Write("Tid = " + _Tid.ToString()+"\n");
if (_Tid == "") mCommand.Parameters["Tid"].Value = DBNull.Value;
else mCommand.Parameters["Tid"].Value = _Tid;//.TimeOfDay;
Con.Open();
RowsAffected = mCommand.ExecuteNonQuery();
Con.Close();
mvh
PeterSv:Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Utifrån dokumentationen (MSDN), så tror jag att du ska deklarera den som "OleDbType.Date".
Då kommer tiden också med.
Förresten vilken databas jobbar du emot?
//HåkanSv: Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Hur vet man vilken databastyp (ex. OleDbType.Date) som man skall använda?
mvh
PeterSv:Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Syftet som den ska användas till.
DBDate visar yyyymmdd, och du vill ha tiden.
Alltså verkar den inte göra "jobbet" i det här fallet.
//HåkanSv: Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Har testat med 'Date' men tiden spars inte, utan dagens datum
utan att jag angder det (default för modar jag).
Har nu löst det genom att använda DBTime och omvandla tidssträngen
till en TimeSpan.
mCommand.Parameters["Tid"].Value = _TimeSpan;
Är inte helt nöjd som jag inte tycker att jag har helt koll på när man
skall använda en viss OleDbType. Visst man kan prova sig fram men
som jag inte fick några fel vid det andra typerna tycker jag ändå
att det finns mjöligheter till framtida fel när man skall spara vissa värden
i olka typer av fält.
Tack för all hjälp!
MVH
PeterSv:Typblandningsfel i villkorsuttryck! OleDbType.DBDate
Bra att det löste sig till slut.
Gôtt att du fixade det själv.
Nu vet du lite mer än tidigare. :-)
//Håkan