2009-05-22 8 views
0

J'utilise VB6 pour mon application. J'ai rempli Excel avec le RecordSet obtenu à partir d'une requête SQL.Format de date en VB6

Une colonne appelée Time_period a des valeurs comme

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

que je dois transmettre ces entrées à une autre requête SQL pour le traitement. Je suis un peu confus avec les formats, car Oracle accepte les entrées de type "23-Jul-2009", "02-Jan-1998" et ainsi de suite. Pouvez-vous aider à la conversion d'un format à l'autre en VB6?

+0

Veuillez publier la requête SQL d'origine, celle que vous utilisez pour remplir l'objet RecordSet. – Tomalak

+0

Ceci n'est probablement pas pertinent pour le questionneur d'origine, mais le format de date utilisé dans Excel, la déclaration au format VB6, etc. dépend de vos paramètres régionaux. Je suppose que vous êtes aux États-Unis à partir de vos formats de date m/d/yyy. Je voudrais juste noter que les solutions affichées ci-dessous ne vont pas fonctionner pour certains d'entre nous ailleurs dans le monde. – MarkJ

Répondre

2

Utilisez Format.

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

Ceci fonctionnera dans votre cas.

Vous pouvez essayer d'utiliser le format suivant (norme ISO):

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

Ne fonctionne que si vos paramètres régionaux sont l'anglais. Sinon, les noms des mois apparaîtront dans une autre langue. J'imagine qu'Oracle pourrait objecter. – MarkJ

+0

La norme ISO est définitivement préférable – barrowc

1

Dim oracleDate As String Dim excelDate Comme DateTime

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

"Dim excelDate As DateTime" - VB6 n'a pas de type de données DateTime. Vouliez-vous dire Date, peut-être? – onedaywhen

1

Si vous obtenez votre date d'un jeu d'enregistrements, vous pouvez stocker dans une variable de date et il suffit d'appeler la fonction de mise en forme suivante pour obtenir la représentation de chaîne vous aimez:

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

Ensuite, vous pouvez passer cette valeur à votre requête SQL ainsi que les délimiteurs de date appropriée. (Si vous n'utilisez pas de paramètres)

Vous pouvez également vérifier les valeurs null, car elles ne fonctionneront pas avec la fonction ci-dessus.

0

Normalement, on 'passe' le résultat d'une requête à une autre en créant un JOIN entre les deux dans le code SQL. Heureusement, les valeurs de date dans la colonne Time_period sont déjà de type temporel; sinon, ils peuvent être castés en utilisant SQL. Même si les données sont dans une base de données différente (par exemple Oracle et Excel), vous pouvez utiliser ACE/Jet (par exemple MS Access) pour créer une requête pour joindre les deux, directement ou via une table encrée. Plus de détails sur ce que vous essayez d'accomplir, s'il vous plaît.

1

Voici un extrait de code d'Excel VBA, devrait fonctionner dans VB6 avec quelques réglages.

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 

Espérons que cela aide.

+0

merci! mauvais usage que – divinci