我在主窗体中有一个日期文本框,该文本框在子窗体中输出6个连续的日期(2周间隔)。在主表单的AfterInsert()
事件中,子表单会填充这些日期。
Private Sub Form_AfterInsert()
Dim strSQL As String
Dim i As Integer
For i = 2 To 12 Step 2
strSQL = "INSERT INTO tbl_Date (DateDescriptionID, TestDate) "
strSQL = strSQL & "SELECT " & Me.tbDescriptionID & ", (DateAdd('ww', " & i & ", #" & Me.tbStartDate & "#));"
CurrentDb.Execute strSQL, dbFailOnError
Next i
End Sub
如果用户在主表单中更改了日期文本框,我希望子表单的日期能够反映出该更改。我尝试使用UPDATE
查询将现有日期替换为新日期,但是在尝试使主外键对齐时遇到了麻烦。我只能用空值(空)替换现有日期,但不确定如何用新日期相应地更新现有日期。
Private Sub tbStartDate_AfterUpdate()
Dim strSQL As String
strSQL = "UPDATE tbl_Date "
strSQL = strSQL & "SET [TestDate] = NULL "
strSQL = strSQL & "WHERE [DateDescriptionID] = " & Me.DescriptionID & ";"
CurrentDb.Execute strSQL, dbFailOnError
End Sub
用户输入2018年5月1日
Date Data
05/15/2018 Apple
05/29/2018 Banana
06/12/2018 Orange
06/26/2018 Strawberry
07/10/2018 Pineapple
07/24/2018 Peach
用户更改条目至2018年6月30日
Date Data
07/14/2018 Apple
07/28/2018 Banana
08/11/2018 Orange
08/25/2018 Strawberry
09/08/2018 Pineapple
09/22/2018 Peach
答案 0 :(得分:0)
请考虑使用相关子查询,但是由于MS Access仅允许对apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.mydrinkmixer.somerestaurant.mydrinkmixer"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard- android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
语句进行可更新查询,因此请使用UPDATE
域聚合。另外,考虑使用parameterization将SQL代码与VBA数据值完全分开。
具体来说,DCount
产生 TestDate 列的排名顺序,然后将它们分别乘以14,即所需的间隔天数(例如1 * 14、2 * 14、3 * 14)。此解决方案不需要循环。
SQL (另存为存储的Access查询)
DCount
VBA
PARAMETERS [DescIDParam] Long;
UPDATE tbl_Date t
SET t.[TestDate] = DCount("*", "tbl_Date", "TestDate <= #" & t.[TestDate] & "#") * 14, t.[TestDate])
WHERE t.[DateDescriptionID] = [DescIDParam]
答案 1 :(得分:0)
跳过所有SQL内容,并使用DAO和 recordsetclone -更干净,更快速且具有自动更新:
Private Sub Form_AfterInsert()
Dim rs As DAO.Recordset
Dim i As Integer
Set rs = Me!NameOfYourSubformCONTROL.Form.RecordsetClone
For i = 2 To 12 Step 2
rs.AddNew
rs!DateDescriptionID.Value = Me!tbDescriptionID.Value
rs!TestDate.Value = DateAdd("ww", i, Me!tbStartDate.Value)
rs.Update
Next i
rs.Close
End Sub
和:
Private Sub tbStartDate_AfterUpdate()
Dim rs As DAO.Recordset
Dim i As Integer
Set rs = Me!NameOfYourSubformCONTROL.Form.RecordsetClone
rs.MoveFirst
While Not rs.EOF
i = i + 2
rs.Edit
rs!TestDate.Value = DateAdd("ww", i, Me!tbStartDate.Value)
rs.Update
rs.MoveNext
Wend
rs.Close
End Sub
答案 2 :(得分:0)
我要使用SQL:
我假设一个名为tblData
的表具有字段ID
(PK,自动递增),Data
(文本)和Sort
(长)
ID Data Sort
1 Apple 3
2 Banana 5
3 Orange 2
4 Strawberry 1
5 Pineapple 4
6 Peach 6
查询:
SELECT Data, DateAdd("ww", 2 * Sort, Forms!ParentForm!txtDate) as ComputedDate FROM tblData Order By Sort;
将此用作子窗体的记录源。如果txtDate
存储在表中,则可以加入或查找。
仅有一个日期始终保持最新。