Access-o-Mania

Access-Forum (Deutsch/German) => Access-Hilfe => Thema gestartet von: Muhtar99 am Mai 31, 2010, 15:29:20

Titel: SQL Datum zwischen ....
Beitrag von: Muhtar99 am Mai 31, 2010, 15:29:20
Hallo Leute,

führe mit VBA ein SQL Befehl aus,  der Datum von bis ausgeben soll nur die between Anweisung gibt Fehler aus.
In der Anweisung sin die von bis variablen als Datum gespeichert.

bitte um schnell hilfe
Titel: Re: SQL Datum zwischen ....
Beitrag von: DF6GL am Mai 31, 2010, 15:48:38
Hallo,

na, dann poste mal ganz schnell den Code , den Du benutzt..
Titel: Re: SQL Datum zwischen ....
Beitrag von: Muhtar99 am Mai 31, 2010, 20:15:28
Hallo hier der code,

"Select ...........
    & " tblKundenauftragsliste.KA_Einteilung AS Einteilung, tblKundenauftragsliste.KA_FertigungsID, " _
    & " tblKundenauftragsliste.KA_Bemerkung AS Bemerkung, tblKundenauftragsliste.KA_istVertriebskunde " _
    & " FROM (tblKundenauftragsliste LEFT JOIN tblKunde ON tblKundenauftragsliste.Kundennummer = tblKunde.Kundennummer) " _
    & " LEFT JOIN tbl_Status ON tblKundenauftragsliste.KA_StatusID = tbl_Status.StatusID " _
    & " WHERE (((tblKundenauftragsliste.KA_wunschtermin) between #" & Format(terminvon, "mm/dd/yyyy") & "# AND  #" & Format(terminbis,     "mm/dd/yyyy") & "#))" _
    & " ORDER BY tblKundenauftragsliste.KundenauftrafNR"   


Der Where teil gibt nur fehler in syntax und das ergebis liefert dann auch kein ergebnis? wie muss der Between Teil aussehen damit ich ein ergebnis habe.

Danke im Voraus.

Titel: Re: SQL Datum zwischen ....
Beitrag von: database am Mai 31, 2010, 20:34:23
Hallo,

woher kommen denn 'terminvon' und 'terminbis' ?

Sind das Formularfelder? Wenn ja, solltest du der Übersichtlichkeit wegen (meine persönliche Meinung) die Inhalte der Formularfelder vor dem Einbau in die SQL konvertieren
lt. donkarl ... strTerminVon = Format(DeinDatumsfeldVon, "\#yyyy\-mm\-dd\#")
                    strTerminBis = Format(DeinDatumsfeldBis, "\#yyyy\-mm\-dd\#")

und die Variablen dann in die WHERE-Klausel einbauen:

WHERE tblKundenauftragsliste.KA_wunschtermin between " & strTerminVon & " AND " & strTerminBis &  " ORDER BY .... "
Sollte es sich um keine Formularfelder handlen sondern um Variablen, in denen bereits Datumswerte enthalten sind KANNST du versuchen - wieder nach donkarl - die WHERE Klausel zu ändern:

" WHERE tblKundenauftragsliste.KA_wunschtermin between " & Format(terminvon, '\#yyyy\-mm\-dd\#') & " AND  " & Format(terminbis, '\#yyyy\-mm\-dd\#')" Achtung - die Formatanweisung steht in EINFACHEN Hochkommata!


stimmt dieser Feldname in der ORDER BY Anweisung? tblKundenauftragsliste.KundenauftrafNR

Grüße
Peter

Titel: Re: SQL Datum zwischen ....
Beitrag von: DF6GL am Mai 31, 2010, 21:02:54
Hallo,

@ database:


...   WHERE tblKundenauftragsliste.KA_wunschtermin between " & Format(terminvon, '\#yyyy\-mm\-dd\#') & " AND  " & Format(terminbis, '\#yyyy\-mm\-dd\')   ...

Achtung - die Formatanweisung steht in EINFACHEN Hochkommata!



dem will ich nicht ganz beipflichten...  Da müssen "Gänsefüße" hin..  ;)
Titel: Re: SQL Datum zwischen ....
Beitrag von: database am Mai 31, 2010, 21:06:17
"Verdammt!" - S T I M M T, danke Franz -  die stehen ja jetzt auch außerhalb der umschließenden Gänsefüße

daher:

" WHERE tblKundenauftragsliste.KA_wunschtermin between " & Format(terminvon, "\#yyyy\-mm\-dd\#") & " AND  " & Format(terminbis, "\#yyyy\-mm\-dd\#")

Grüße

Peter
p.s. sollte um die Zeit besser schon hinter die Decke ... :)
Titel: Re: SQL Datum zwischen ....
Beitrag von: DF6GL am Mai 31, 2010, 21:09:09
Hinter oder unter ??  ;D
Titel: Re: SQL Datum zwischen ....
Beitrag von: database am Mai 31, 2010, 21:12:59
Unter die hintere ... *aaahhh*
LG
Titel: Re: SQL Datum zwischen ....
Beitrag von: DF6GL am Mai 31, 2010, 21:15:55
also "hinunter"    :D  ;D

bis bald...


Titel: Re: SQL Datum zwischen ....
Beitrag von: Muhtar99 am Mai 31, 2010, 21:40:23
Hallo Leute,

danke nocheinmal für die schnelle Antworten.

habe es im  code geändert:

.....
& " WHERE ((tblKundenauftragsliste.KA_wunschtermin) between " & Format(terminvon, "\#yyyy\-mm\-dd\#") & " AND " & Format(terminbis, "\#yyyy\-mm\-dd\#") & ")" _
......

die sqlanweisung übergebe ich als rowsource eingenschaft an meine liste. Das problem ist das ich keine ergebnisse bekomme.

Wenn ich aber den sql an eine Abfrage schreibe (SQL) liefert der mir ergebnisse. Also mache ich immer noch falsch nur weiss ich nicht mehr was.... :(


Danke nocheinmal für eure Hilfe
Titel: Re: SQL Datum zwischen ....
Beitrag von: database am Mai 31, 2010, 21:46:29
Hi,

was steht denn in terminvon und terminbis drinnen bzw was stellen diese Dinger dar (Datentyp wenn es Variablen sind)?

wenn du das SO in einen Abfragenentwurf schreibst kann der nichts liefern, weil die Abfrage nicht 'weiß' was zu vergleichen ist (im between-Teil)!

...und warum bindest du die Liste nicht an die Abfrage, wenn diese funktioniert?
Speichere die Abfrage mal ab und verweise mit der Datenherkunft für das Listenfeld auf die Abfrage.
Titel: Re: SQL Datum zwischen ....
Beitrag von: Muhtar99 am Mai 31, 2010, 21:52:25
Hi hier die Ergänzung,

auf meinem Formular befinden sich zwei Textfelder (für datum von bis). diese speichere ich immer bei änderung in "terminvon as Date" und "terminbis as date" ab und übergebe sie dann an mein sqlbefehl. Wenn ich die liste dierekt an eine Abfrage binden sollte müsste ich dem dann immer wenn diese textfelder geändert werden als parameter mitübergeben. Da dachte dieser weg wäre einfacher,  oder?

p.s bevor ich den Eintrag in meine variablen speichere prpfe ich natürlich vorher ob der eintrag ein datum ist!

Hoffe jetzt könnt ihr mir weiter helfen
Titel: Re: SQL Datum zwischen ....
Beitrag von: database am Mai 31, 2010, 22:08:15
Hi,

somit vermute ich den Fehler erkannt zu haben ...

terminvon und terminbis sind demnach Variablen vom Datentyp Date.
Du solltest für die Übergabe eines Datums an einen SQL-String jedoch besser Stringvariablen verwenden

siehe hierzu auch www.donkarl.com?FAQ6.8 (http://www.donkarl.com?FAQ6.8)

Versuche nun noch folgendes:
Dim strTerminVon as String, strTerminBis as String
strTerminVon = Format(Me!DeinDatumsFeldVon, "\#yyyy\-mm\-dd\#")
strTerminBis = Format(Me!DeinDatumsfeldBis, "\#yyyy\-mm\-dd\#")

"Select ........... " & _
    " tblKundenauftragsliste.KA_Einteilung AS Einteilung, tblKundenauftragsliste.KA_FertigungsID, " & _
    " tblKundenauftragsliste.KA_Bemerkung AS Bemerkung, tblKundenauftragsliste.KA_istVertriebskunde " & _
    " FROM (tblKundenauftragsliste LEFT JOIN tblKunde ON tblKundenauftragsliste.Kundennummer = tblKunde.Kundennummer) " & _
    " LEFT JOIN tbl_Status ON tblKundenauftragsliste.KA_StatusID = tbl_Status.StatusID " & _
    " WHERE ((tblKundenauftragsliste.KA_wunschtermin) between " & strTerminVon & " AND " & strTerminBis & ")" & _
    " ORDER BY tblKundenauftragsliste.KundenauftrafNR"   

Achte bitte auch darauf die Textverbinder  & _   so einzubinden wie ich es oben gemacht habe (Vor und nach & ein Leerzeichen!).
Titel: Re: SQL Datum zwischen ....
Beitrag von: Muhtar99 am Juni 01, 2010, 11:40:01
hi,
habe deine anweisungen befolgt und genauso geändert


....
  & " WHERE (((tblKundenauftragsliste.KA_wunschtermin) between " & terminvon & " AND " & terminbis & "))"
.....


terminvon und terminbis vorher formatiert.

nun habe ich immer noch den gleichen Fehler. Bekomme keinen ergebnis. Müssen wirklich terminvon und terminbis als string definiert werden?

Und warum gibt mir die gleiche anweisung in einer Abfrage ergebnis und im Code keinen??

Titel: Re: SQL Datum zwischen ....
Beitrag von: database am Juni 01, 2010, 12:08:48
Hallo,

nur zur Klärung ...

Die von dir angeführte SQL ist als Datenherkunft für ein LISTENFELD gedacht?
Du gibst die SQL im Formularentwurf, Eigenschaften des Listenfeldes unter Datensatzherkunft ein - wenn ja, kann's nicht funktionieren, da du hier NICHT mit Variablen arbeiten kannst.

Wenn du das nicht so machst, dann erkläre bitte was du genau machst, mir kommt das Ganze nicht recht geheuer vor.
Vielleicht kannst du eine Kopie deiner DB mi 3-5 Datensätzen in den relevanten Tabellen hochladen, ich würde das gerne praktisch sehen.
LG
Peter
Titel: Re: SQL Datum zwischen ....
Beitrag von: Muhtar99 am Juni 01, 2010, 13:33:19
Hallo Leute,

die anweisund ist richtig es funktioniert auch.
habe sqltxt as string definiert und und mein sql abgespeichert

Es war nur ein dummer fehler von mir was ich erst jetzt bemerkt habe. Bei der Zuweisung (sqltxt) als rowsource in mein listenfeld habe ich statt sqltxt immer sqltext geschrieben, somit war das ergebnis immer leer. Also es lag nur an dieser einen Buchstabe "e" der zuviel war.

Nun Danke nocheinmal an alle die mitgeholfen haben.