設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 3644|回復(fù): 4
打印 上一主題 下一主題

[其它] [原創(chuàng)]一段代碼:輸入數(shù)據(jù)不在列表中,自動增加列表的例子

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2007-2-10 01:01:00 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
一個朋友希望達(dá)到:在組合框中輸入新的客戶編碼即跳到新的客戶檔案窗體中輸入新客戶資料,然后跳回來錄入窗體繼續(xù)輸入數(shù)據(jù)的功能,我在本站找了個朱亦文版主的例子(http://ctxi.cn/forum.php?mod=viewthread&tid=686&replyID=&skin=1)來看。但我發(fā)現(xiàn)一些小的不足:

1、輸入新碼,跳到檔案窗體輸入該新客戶資料后,返回原錄入窗體時,必須重新輸入編碼或須在下拉列表中重新輸入才可通過,否則就又得跳出不在列表的提示。因此增加了一個重新輸入編碼的動作。

2、打開帶參數(shù)的客戶檔案窗體時追加相應(yīng)的客戶編碼時,代碼分布于兩個窗體中不便于理解維護(hù)。因此用了個追加查詢來代替。

因此將此代碼貼上來和大家分享。

注:代碼中的窗體組合框控件名稱為:“客戶”其數(shù)據(jù)來源于表“客戶檔案”,然后有一個名字叫“客戶檔案”的表以及同名的錄入窗體。

Private Sub 客戶_NotInList(NewData As String, Response As Integer)
'NewData 為您輸入的不在列表中的值
If MsgBox("在客戶檔案中不存在 " & NewData & vbCr & "增加嗎?", vbYesNo) = vbYes Then
   '往客戶檔案表中先增加一個以輸入的編碼為標(biāo)準(zhǔn)的臨時客戶,如果表中還有必填的項(xiàng)目都須先用默認(rèn)值追加進(jìn)去
   DoCmd.SetWarnings False
   DoCmd.RunSQL "INSERT INTO 客戶檔案 (客戶編碼,客戶名稱 )SELECT '" & NewData & "', '" & NewData & "';"
   DoCmd.SetWarnings True
   '打開客戶檔案窗體,顯示剛才追加大那一記錄,以便于更改
   DoCmd.OpenForm "客戶檔案", acNormal, , "客戶編碼='" & NewData & "'"
   '放棄剛才的輸入然后刷新組合框的列表數(shù)據(jù),然后程序再填寫一遍新值
   Me.客戶.Undo
   Me.客戶.Requery
   Me.客戶 = NewData
Else
   客戶.SetFocus
End If

'取消系統(tǒng)默認(rèn)的不在列表中的提示信息
Response = acDataErrContinue
End Sub


[此貼子已經(jīng)被作者于2007-2-9 17:10:30編輯過]

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2007-2-10 01:55:00 | 只看該作者
好象用不著runsql吧

客戶窗體:

Private Sub Form_Load()
    If Not IsNull(Me.OpenArgs) Then
        Me.供應(yīng)商 = Me.OpenArgs
    End If

End Sub


輸入窗體:

Private Sub 供應(yīng)商ID_NotInList(NewData As String, Response As Integer)
    Dim intReply As Integer
   
    intReply = MsgBox("當(dāng)前供應(yīng)商‘" & NewData & _
        "’不存在。" & vbCrLf & vbCrLf & "是否增加?", vbYesNo, "注意")
        
    If intReply = vbYes Then
        DoCmd.OpenForm "供應(yīng)商窗體", , , , acFormAdd, acDialog, NewData
        Response = acDataErrAdded
    Else
        MsgBox "請重新選擇供應(yīng)商。", vbCritical
        Response = acDataErrContinue
    End If
   
End Sub
3#
 樓主| 發(fā)表于 2007-2-10 02:13:00 | 只看該作者
回復(fù):tz-chf  第一樓第2點(diǎn)不是說明了嗎?

代碼分布于兩個窗體中不便于理解和維護(hù)。代碼在一起一目了然。

4#
發(fā)表于 2007-2-10 04:54:00 | 只看該作者
很簡單嘛,有什么不好理解的。

DoCmd.RunSQL "INSERT INTO 客戶檔案 (客戶編碼,客戶名稱 )SELECT '" & NewData & "', '" & NewData & "';"


“客戶編碼”和“客戶名稱”一樣嗎???

還有怎么用select,不用values



[此貼子已經(jīng)被作者于2007-2-9 20:55:39編輯過]

5#
發(fā)表于 2007-12-15 13:06:17 | 只看該作者
謝謝版主分享!
我原來也是用兩個窗體,代碼只在一個窗體
Private Sub 出貨客戶_NotInList(NewData As String, Response As Integer)
On Error Resume Next

    If MsgBox("沒有這個客戶,是否要立即添加?", 4) = 6 Then
       DoCmd.OpenForm "客戶錄入", , , , acFormAdd
       Forms![客戶錄入]![客戶名稱] = Me![出貨客戶].Text
       Response = acDataErrContinue
      
       DoCmd.RunCommand acCmdSaveRecord
       Forms![出貨錄入]![出貨客戶].Undo
       Forms![出貨錄入]![出貨客戶].Requery
       Forms![出貨錄入]![出貨客戶] = Forms![客戶錄入]![客戶名稱]
       DoCmd.Close
    Else
       SendKeys "{escape}"
    End If
   
End Sub
但是弊端是如果要直接加入不做修改,“客戶錄入”窗體會一閃而過,不爽!用docmd.echo false無效。用您的辦法就沒有這個問題了,只要不要打開“客戶檔案”窗體就是了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:29 , Processed in 0.104924 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表