vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Datumsabgleich SQlite und VB.net 
Autor: gzi
Datum: 14.11.12 16:03

Hallo zusammen,

ich komme gerade nicht weiter...

Folgende Situation.

Ich habe Datensätze, die mit einem "Date" Feld versehen sind in einer SQLite Datenbank.
Diese Daten möchte ich gerne gefiltert in meinem VB.net Programm aufrufen.
Es sollen allerdings nur die Daten ausgegeben werden, die eine bestimmte Datumsgrenze erreicht haben.
Derzeit verwende ich folgenden Code für das Vorhaben (Auf Seite SQL).

 
cmd.CommandText = "select distinct contact_exhibit from contacts where" & _
  "contact_date >= " & converted_start_date & " order by contact_exhibit asc"
Man mag sich jetzt über das "converted" vor Start Date wundern.
Dies stammt daher, dass wenn ich das Datum aus der SQL DB ziehe und es abgleiche mit einer "Date" Variable (start_date) aus VB ich die Rückmeldung bekomme, dass ich eine Ungültige Syntax verwende.
folgende Lösung habe ich gefunden um dem Fehler beizukommen.

        'Es sollen nur eine bestimmte Anzahl Einträge gezeigt werden
        'Die Einträge die angezeigt werden, sollen nicht älter als 
        ' age_of_entries Monate sein
        start_date = DateAdd(DateInterval.Month, -age_of_entries, Date.Today)
        'Um das Datum in einer Datenbankabfrage zu nutzen, muss es entsprechend 
        ' umformatiert werden
        'Das ist zwar unverhältnismäßig kompliziert, leider habe ich aber 
        ' keinen anderen Weg!
        converted_start_date = Convert.ToDateTime(start_date).ToString( _
          "dd-MM-yyyy")
Das Problem ist aber in dieser Lösung, dass kein Abgleich von dem Datum aus VB mit dem Datum aus SQL stattfindet und er einfach alle Einträge anzeigt. (Klar, da ich das converted_start_datum auf dd-MM-yyyy konvertiere aber ein dd.MM.yyyy in der SQL Datenbank habe).

Ich hoffe, dass von euch jemand mein Problem nachvollziehen und eventuell lösen kann!

Danke!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: ModeratorFZelle (Moderator)
Datum: 14.11.12 18:20

Dein Problem wird hier in ca 10% aller Postings hier beantwortet.

Benutze die ParameterCollection des Commands und du musst dich nicht um die richtige Konvertierung kümmern.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: gzi
Datum: 19.11.12 12:41

Moin FZelle,

danke für die schnelle Antwort.
Habe das Problem unter dem Stichwort jetzt einige male gefunden, doch kann ich es nicht zum funktionieren bringen.

Derzeit siehts so aus...
start_date = DateAdd(DateInterval.Month, -age_of_entries, Date.Today)
'entsprechende Connection Command
        cmd.Parameters.AddWithValue("@start_date", start_date)
        cmd.CommandText = "select distinct contact_exhibit from contacts where" & _
          "contact_date >= @start_date order by contact_exhibit asc"
Da die Ergebnisse totaler mist sind, habe ich einmal die cmd.commandtext ausgeben lassen und die sieht so aus....
select distinct contact_exhibit from contacts where contact_date >= _
  @start_date order by contact_exhibit asc
Es ist also kein Wert an der Stelle von @start_date, sondern er sucht in den Datumsfeldern nach "@start_date" selbst.

Ich komme auch mithilfe der bereits geposteten Themen dazu nicht weiter und bitte darum nochmals um Hilfe.

Danke!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: ModeratorFZelle (Moderator)
Datum: 19.11.12 13:10

Da hast du aber etwas komplett falsch verstanden.

Die Parameter werden nicht in den SqlString eingefügt, sondern dieser wird genau so wie Du ihn siehst übertragen und die Parameter werden extra übertragen.
Das ist es doch, was dieses Prinzip nicht nur Konvertierungsunabhängig macht, sondern zusätzlich gegen SqlInjections hilft.


Zitat:

Da die Ergebnisse totaler mist sind,

Das ist keine Fehlerbeschreibung.
Wie sieht die Tabellendefinition aus?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: gzi
Datum: 19.11.12 13:33

Eine Fehlermeldung bekomme ich "leider" nicht.
Er gibt mir einfach alle Datenbankeinträge aus (da das Datum von allen Einträgen größer ist als "@start_date").

Wie würde denn meine Abfrage mit Parametern aussehen (wenn nicht so, wie ich sie gemacht habe)?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: Micke
Datum: 19.11.12 15:25

würde @start_date falsch, also bspw. leer übergeben werden, käme es zum fehler,
an der Abfrage liegt es also eher nicht.
bist dir sicher daß start_date deiner erwartung entspricht ?

Micke

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: gzi
Datum: 19.11.12 15:33

Hi Micke,

start_date hat den Wert 19.08.2012 (Entsprechend heute - 3 Monate).
Ist soweit korrekt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: ModeratorFZelle (Moderator)
Datum: 19.11.12 16:02

Du weist also das alle Datensätze zur Abfrage passen und wunderst dich das die Abfrage alle auch liefert?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: gzi
Datum: 19.11.12 16:10

Das sollte ich aufklären...

Die Datensätze sind teilweise neuer als dieses Datum und teilweise älter.
Er dürfte entsprechend auf keinen Fall alle Datensätze ausgeben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: Micke
Datum: 20.11.12 10:20

zum verproben kannst du ja folgendes absetzen:

select .... contact_date < @start_date

bei der Annahme daß der sqlparameter nicht greift, solltest du wieder alle datensätze bekommen.
was aber bestimmt nicht der fall sein wird. somit ....

Micke

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: ModeratorFZelle (Moderator)
Datum: 20.11.12 10:35

Dann lies dir bitte deine Postings nochmal durch.

Und nun noch einmal, wie sieht das DB Schema aus?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: oli2008
Datum: 20.11.12 11:00

Hallo gzi,

bei mir funktioniert der Datumsabgleich, aber ich muss mein Datum in einem anderen Format eingeben:

yyyy-mm-dd
also genau andersrum wie du oben angegeben hast.

Oliver
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: ModeratorDaveS (Moderator)
Datum: 20.11.12 11:04

Mag sein, aber was genau klappt (meistens immerhin amerikanische Schreibweise) kann vom DB System abhängen. Mit Parametern hat man das Problem einfach nicht.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datumsabgleich SQlite und VB.net 
Autor: gzi
Datum: 20.11.12 11:11

Moin, hier die DB:

id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
contact_name TEXT NOT NULL,
contact_surname TEXT NOT NULL,
contact_email TEXT NOT NULL,
contact_plz INT(5) NOT NULL,
contact_interest TEXT NOT NULL,
contact_date DATE NOT NULL,
contact_exhibit TEXT NOT NULL
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel