一个会员系统,查询出一个会员的信息并显示到窗体上后,会员入会日期用一个textbox来显示,Text1(13).Text = query_rs!member_rhrq
  query_rs!member_rhrq在数据表中定义为日期类型(access数据库),在text1(13)中日期显示为:04-5-9(但是在XP下运行显示为:2004-5-9,实际在数据库中也是2004-5-9这种格式,不知为何在98下就成了这种格式),如果想将其修改为02-8-20,输入02-8-20,点修改后重新查询,却变为了:20-2-8,但在XP下却一切正常,不知哪里出了问题?用的修改语句为:
"update member set member_ttdj='" & Trim(Combo1(1).Text) & "',member_rhrq=#" & CDate(Trim(Text1(13).Text)) & "#,member_hf='" & Trim(Text1(1).Text)  where member_id='" & edit_member_id & "'"语句应该没错吧?谢谢.

解决方案 »

  1.   

    Win98 中设置:控制面板\区域设置
    你的区域设置 = 中文(中国)
    短日期格式 = "yyyy-MM-dd"
      

  2.   

    Tiger_Zhao 说的是可以,但是治标不治本。
    根本的解决方法是,
    在构建查询字符串时,先把日期用 Format 函数格式化一下。
    如:
    Format(你的日期变量, "yyyy-mm-dd") & " " & Format(你的时间变量, "HH:mm:ss")
      

  3.   

    Tiger_Zhao(VB老鸟)兄说和是可以.
     wuljia(武力电子) ,只是查询时格式化吗?写入记录时需不需设置?
      

  4.   

    那当然也需要
    Format(日期变量,"yyyy-mm-dd HH:mm:ss")
      

  5.   

    Text1(13).Text = format(query_rs!member_rhrq,"YYYY-MM-DD")
      

  6.   

    不行啊,如果短日期格式 = "YY-MM-dd"的话,就是用了以上格式日期的方法也要出错,比如:要修改日期为2001-04-06,却被修改成了2006-01-04,再将这个日期不改动,再按一下修改又变成了2004-06-01,怎么做啊?
      

  7.   

    Private Const HWND_BROADCAST = &HFFFF&
    Private Declare Function SetLocaleInfo Lib "kernel32" Alias "SetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Boolean
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
    Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
    Sub setdateformat()
        Dim dwLCID As Long, i As Long
        Dim lpLCData As String * 255, cchData
        cchData = Len(lpLCData)
        dwLCID = GetSystemDefaultLCID()
        i = SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "yyyy-MM-dd") '设置短日期的格式
        PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
        i = SetLocaleInfo(dwLCID, 32, "yyyy'年'M'月'd'日'") '设置长日期的格式
        PostMessage HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0
    End Sub
      

  8.   

    哪儿不懂?就是用了三个API函数呀//除了在控制面板里改短日期无计可施了,但万一被别人改动了就麻烦了i = SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "yyyy-MM-dd") '设置短日期的格式
    这一句,就是改短日期格式,你可以试下"yyyy-MM-dd"改不同格式,执行这一段代码,然后打开控制面板看看
      

  9.   

    彻底的解决方法
    1.用 DTPicker 控件进行日期输入
    2.用 RecordSet 的 AddNew 进行数据更新,就不存在 SQL 中日期格式解析错误的问题。
      

  10.   

    支持 ////freedomjim(老鬼来了)
      

  11.   

    viena(维也纳nn-实心木头人石欠RUKYO) :
    好相不行,把短日期改为:i = SetLocaleInfo(dwLCID, LOCALE_SSHORTDATE, "yy-MM-dd")
    执行后控制面板里还是YYYY-M-D
      

  12.   

    Tiger_Zhao(VB老鸟) 
    用DTPICKER原来也想过,但窗体上有五六个地方需要输入日期,太麻烦了.
      

  13.   

    Win98 中设置:控制面板\区域设置
    你的区域设置 = 中文(中国)
    短日期格式 = winxp 的日期格式
      

  14.   

    这一段代码都拷过去运行了吗?
    setdateformat()是一个Sub
    要调用才行的
    call setdateformat()
      

  15.   

    我试过了,可以改的,但是在win2000里面
    我这里没有win98~
      

  16.   

    需求变化时要改几十处的情况不少见,兄弟你要有思想准备,怕苦怕累就不要做程序员。>回复人: nieer(笨鸟)
    >Tiger_Zhao(VB老鸟) 
    >用DTPICKER原来也想过,但窗体上有五六个地方需要输入日期,太麻烦了.
      

  17.   

    实在不行,你就不要用日期格式存放数据,把日期当字符串(varchar)存放