2009-05-22 16 views
0

Ich verwende VB6 für meine Anwendung. Ich habe Excel mit dem aus einer SQL-Abfrage erhaltenen RecordSet gefüllt.Datumsformat in VB6

Eine Spalte namens Time_period hat Werte wie

"2/31/2006" 
"12/29/2000" 
etc. 

Ich brauche diese Eingaben an einen anderen SQL-Abfrage für die Verarbeitung zu übergeben. Ich bin wenig mit den Formaten verwechselt, da Oracle Eingaben vom Typ "23-Jul-2009", "02-Jan-1998" und so weiter akzeptiert.

Können Sie helfen, in VB6 von einem Format in das andere zu konvertieren?

+0

Geben Sie die ursprüngliche SQL-Abfrage ein, die Sie zum Auffüllen des RecordSet-Objekts verwenden. – Tomalak

+0

Dies ist wahrscheinlich nicht relevant für den ursprünglichen Fragesteller, aber das Datumsformat in Excel, VB6 Format Anweisung usw. hängt von Ihren regionalen Einstellungen ab. Ich nehme an, Sie sind in den USA von Ihren m/d/yyy Datumsformaten. Ich möchte nur darauf hinweisen, dass die unten aufgeführten Lösungen für einige von uns anderen auf der Welt nicht funktionieren. – MarkJ

Antwort

2

Verwenden Format.

Debug.Print Format$(Now, "dd-mmm-yyyy") 

Dies wird in Ihrem Fall funktionieren.

Sie könnten versuchen, das folgende Format (ISO-Norm) mit:

Debug.Pring Format$(Now, "yyyy-MM-dd") 
+0

Funktioniert nur, wenn Ihre regionalen Einstellungen Englisch sind. Andernfalls werden die Monatsnamen in einer anderen Sprache ausgegeben. Ich stelle mir vor, dass Oracle etwas dagegen haben könnte. – MarkJ

+0

Die ISO-Norm ist definitiv vorzuziehen – barrowc

1

Dim oracleDate As String Dim excelDate als Datum-

oracleDate = Format$(excelDate , "dd-mmm-yyyy") 
+0

"Dim ExcelDate als DateTime" - VB6 hat keinen DateTime-Datentyp. Meinst du Date, vielleicht? – onedaywhen

1

Wenn Sie Ihr Datum von einem Re-Cord erhalten, können Sie es in einer Datumsvariablen speichern und nur die folgende Formatierung Funktion aufrufen, die erhalten String-Darstellung Sie mögen:

Format(myDateVar, "dd-mmm-yyyy") 

Dann Sie diesen Wert auf Ihre SQL-Abfrage zusammen mit dem richtigen Zeitpunkt delimiters passieren können. (wenn keine Parameter verwendet werden)

Sie können auch nach null Werten suchen, da sie nicht mit der obigen Funktion funktionieren.

0

Normalerweise würde man das Resultset einer Abfrage an eine andere "weitergeben", indem man im SQL-Code einen JOIN zwischen den beiden erzeugt. Hoffentlich sind die Datumswerte in Spalte Time_period bereits von einem temporalen Typ; Wenn nicht, können sie mit SQL in einen umgewandelt werden. Selbst wenn sich die Daten in einer anderen Datenbank (z. B. Oracle und Excel) befinden, könnten Sie ACE/Jet (auch als MS Access bezeichnet) verwenden, um eine Abfrage zu erstellen, um die beiden entweder direkt oder über eine eingefärbte Tabelle zu verbinden. Mehr Details von dem, was Sie erreichen möchten, bitte.

1

Hier ist ein Code-Snippet von Excel VBA, sollte in VB6 mit einigen Verbesserungen funktionieren.

Sub temp() 
    Dim lConn, lRs, sSQL As String 
    Set lConn = CreateObject("ADODB.Connection") 
    Set lRs = CreateObject("ADODB.Recordset") 

    lConn.Open "DSN=yourdns; UID=youruid; PWD=yourpwd;" 

    Dim oWS As Worksheet 
    Set oWS = Worksheets(1) 

    sSQL = " SELECT * FROM Product WHERE Last_Upd_Date > to_date('" & oWS.Range("A1").Value & "', 'MM-DDD-YYYY') " 
    lRs.Open sSQL, lConn 

    Debug.Print lRs.EOF 
    lRs.Close 
    lConn.Close 
End Sub 

Hoffe, das hilft.

+0

danke! ich nutze das – divinci