access中一个表单中选中一个复选框其余的也会选中怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了access中一个表单中选中一个复选框其余的也会选中怎么解决相关的知识,希望对你有一定的参考价值。

关于VBA:使用Access子表单中的复选框

ms-accessvba
using checkbox in subform in access

我想在子表单中使用一个复选框来显示付款是否已经完成,并希望可以从子表单中对其进行编辑。

问题是如果我选中或取消选中子窗体中的复选框,其他行也会受到影响,并且原始表中的数据也会更改。如何避免这种情况?

任何建议都将受到高度赞赏。

相关讨论
您显然拥有不受约束的控制权。这些是有问题的。 stackoverflow.com/questions/13019124/…
感谢您的答复和链接,但是我不明白"您可以使用条件格式设置更改组合的各种属性,以使其更加美观。"对不起,我只是一个初学者。
您没有使用组合,因此并非所有组合都适用。关键是您有一个未绑定的控件。使用绑定控件。
如果您的子窗体显示的是表中的记录而不是查询中的记录,那么您应该能够在基础表中添加一个"是/否"字段,然后将该字段添加到您的子窗体中。正如@Fionnuala所说,您需要使用一个"绑定"控件。这仅意味着确保将子窗体的记录源设置为具有"是/否"字段的表。这是在设计视图中为您的子窗体>属性表>数据选项卡>记录源完成的,然后选择此表。然后,只需单击"添加现有字段"按钮,然后将您的"是/否"字段拖到子窗体中即可。
该子窗体正在显示来自查询的记录,并且该复选框已绑定。那么,查询是我遇到问题的原因吗?
除非已经设置好查询,否则查询不太可能是问题所在。尝试使用表单向导创建一个粗糙的表单,并查看其工作原理。您也可以发布SQL。
创建另一个表。我用selection字段(复选框)和字段RecordID(作为FK)调用了我的Selection_Table。

然后您可以在子表单中使用它。然后可以使用VBA从Selection_Table中选择RecordID,其中selection = 1。

在我的关闭表格上,我还有以下代码,以确保将来的情况不受当前选择的影响。

1
db.execute(DELETE * FROM Selection_Table)
参考技术A 解决方法:可以在复选框的On_Enter事件中加入一个VBA编写的代码,将该字段设置为false,这样即使复选框被选中,它也会被取消选中,从而达到取消其他勾选框的效果。 参考技术B 关于VBA:使用Access子表单中的复选框 | 码农家园
using checkbox in subform in access我想在子表单中使用一个复选框来显示付款是否已经完成,并希望可以从子表单中对其进行编辑。 问题是如果我...
www.codenong.com

如何使用复选框在 mySQL 中输入 true (1) 或 false (0) 并显示为在 php / html 表单中选中?

【中文标题】如何使用复选框在 mySQL 中输入 true (1) 或 false (0) 并显示为在 php / html 表单中选中?【英文标题】:How to use checkboxes to enter true (1) or false (0) into mySQL AND show as checked in php / html form? 【发布时间】:2012-12-10 05:23:14 【问题描述】:

我有一个字段名称为Shift_Trig 的表,该表意味着以10 的形式输入truefalse 值。我有一个 html 表单,每行都有一个复选框,选中后,应在字段中输入 1。我还希望该复选框反映存储在数据库中 Shift_Trig 字段中的当前值。

我当前代码遇到的问题是,每当我 UPDATE Shift_Trig 字段时,我都没有得到我想要的结果。例如,如果我选择:

----------------------
| ROW 1   |   false  |
----------------------
| ROW 2   |   true   |
----------------------
| ROW 3   |   false  |
----------------------
| ROW 4   |   true   |
----------------------
| ROW 5   |   true   |
----------------------

它会像这样UPDATE

----------------------
| ROW 1   |   true   |
----------------------
| ROW 2   |   true   |
----------------------
| ROW 3   |   true   |
----------------------
| ROW 4   |   false  |
----------------------
| ROW 5   |   false  |
----------------------

这是我的表单代码:

while($shift_query = $result_shift_query->fetch_assoc())
    
    echo "<tr>";    
    echo "<td><input type=\"hidden\" name=\"Shift_ID[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Short_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Color[]\"></td>";
    echo "<td><input type=\"hidden\" name=\"Shift_Trig[]\" value=\"0\"><input type=\"checkbox\" name=\"Shift_Trig[]\"";
        if($shift_query['Shift_Trig'] == '1')
            
            echo " checked=\"checked\"";
            
    echo " value=\"1\"></td>";
    echo "<td><input type=\"checkbox\" name=\"deleteBox[]\"></td>";
    echo "</tr>";
    

这是我的UPDATE 代码:

if(isset($_POST['update_submit']))
    
    $id = $_POST['Shift_ID'];
    $name = $_POST['Shift_Name'];
    $short_name = $_POST['Shift_Short_Name'];
    $color  = $_POST['Shift_Color'];
    $trig = $_POST['Shift_Trig'];

    $i = 0;

foreach($id as $update) 
    
    $sql = ("UPDATE shift SET Shift_Name = '$name[$i]', Shift_Short_Name = '$short_name[$i]', Shift_Color = '$color[$i]', Shift_Trig = '$trig[$i]' WHERE Shift_ID = '$update'");
    if(!$result_shift_update = $mysqli->query($sql))
        
        die = ("There was an error updating the shift table [" . $mysqli->error . "]");
        
    echo "sql: " . $sql . "<br>";
    $i++;
    

我删除了一些代码以使其更易于阅读,例如使用数据库中的字段数据填充文本框的位置。

当我在表单中选择第 2 行和第 3 行,然后回显 $sql 语句时,我得到了这个:

sql: UPDATE shift SET Shift_Name = 'None', Shift_Short_Name = 'None', Shift_Color = '#FF0000', Shift_Trig = '1' WHERE Shift_ID = '1'
sql: UPDATE shift SET Shift_Name = 'Morning (05:30 - 14:30)', Shift_Short_Name = 'AM', Shift_Color = '#FFF8AF', Shift_Trig = '1' WHERE Shift_ID = '2'
sql: UPDATE shift SET Shift_Name = 'Evening (14:30 - 23:30)', Shift_Short_Name = 'PM', Shift_Color = '#AF9BCF', Shift_Trig = '' WHERE Shift_ID = '3'
sql: UPDATE shift SET Shift_Name = 'General (07:30 - 17:30)', Shift_Short_Name = 'GEN', Shift_Color = '#ABFFB3', Shift_Trig = '' WHERE Shift_ID = '4'
sql: UPDATE shift SET Shift_Name = 'Night (18:00 - 06:00)', Shift_Short_Name = 'EMMA', Shift_Color = '#BFFAFF', Shift_Trig = '' WHERE Shift_ID = '5'
sql: UPDATE shift SET Shift_Name = 'Training', Shift_Short_Name = 'TRN', Shift_Color = '#FFD9BF', Shift_Trig = '' WHERE Shift_ID = '6'
sql: UPDATE shift SET Shift_Name = 'Day Off', Shift_Short_Name = 'OFF', Shift_Color = '#FFD859', Shift_Trig = '' WHERE Shift_ID = '7'

发生了什么是有道理的,因为第一个复选框没有被选中,它没有被传递给$_POST 数据,但是我如何编写代码才能得到想要的结果?

编辑:我添加了:&lt;input type=\"hidden\" name=\"Shift_Trig[]\" value=\"0\"&gt;,但现在我每隔一个复选框就会显示为选中状态。

【问题讨论】:

考虑这种方法:&lt;input type="hidden" name="Shift_Trig[$id]" value="0" /&gt;&lt;input type="checkbox" name="Shift_Trig[$id]" value="1" $checked /&gt;。如果复选框被选中,它将覆盖隐藏的值,如果没有,隐藏的值将被发送。在我看来,在这种情况下,最合乎逻辑的$id 将是班次的 ID 而不是某个索引。 (编辑:另外,查看prepared statements and bind variables。) @DCoder 我刚刚读到这个answer,它提出了同样的问题。我要试试。 @DCoder 我编辑了这个问题,由于某种原因它不起作用:/ 您错过了隐藏输入和复选框具有相同名称的部分,基于 $id。实际上,我建议对 HTML 结构进行更彻底的更改(将每个 shift 放入单独的数组中,而不是依赖这种基于索引的解决方案)。 啊,我知道我现在错过了 $i 的地方,这是有道理的。我不确定将每个 shift 放入一个单独的数组中是什么意思,但我很想知道你的意思。如您所见,我已经标记了这个问题的解决方案,但是我仍然非常感谢您的时间和帮助:) 【参考方案1】:

您需要在 HTML 中为复选框指定一个明确的索引:

$i = 0;
while($shift_query = $result_shift_query->fetch_assoc())
    
    echo "<tr>";    
    echo "<td><input type=\"hidden\" name=\"Shift_ID[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Short_Name[]\"></td>";
    echo "<td><input type=\"text\" name=\"Shift_Color[]\"></td>";
    echo "<td><input type=\"checkbox\" name=\"Shift_Trig[$i]\"";
        if($shift_query['Shift_Trig'] == '1')
            
            echo " checked=\"checked\"";
            
    echo " value=\"1\"></td>";
    echo "<td><input type=\"checkbox\" name=\"deleteBox[$i]\"></td>";
    echo "</tr>";
    $i++;
    

在更新代码中,在循环的开始处,做:

    if (!isset($trig[$i]))  $trig[$i] = 0; 

其余更新代码不变。

【讨论】:

感谢您的回复。你能告诉我UPDATE 查询是什么样的吗? 解决了!我将其标记为已解决,感谢您的帮助,我今天学到了一些有价值的东西!

以上是关于access中一个表单中选中一个复选框其余的也会选中怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

如何使用复选框在 mySQL 中输入 true (1) 或 false (0) 并显示为在 php / html 表单中选中?

如何在联系表格 7 WP 中选中复选框

MS Access 表单中复选框内的灰色阴影

Access 2013 - 表单上的复选框

如何在连续子表单中使用未绑定复选框 - MS Access 2013

查找是不是在 servlet 中选中复选框