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
的表,该表意味着以1
或0
的形式输入true
或false
值。我有一个 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
数据,但是我如何编写代码才能得到想要的结果?
编辑:我添加了:<input type=\"hidden\" name=\"Shift_Trig[]\" value=\"0\">
,但现在我每隔一个复选框就会显示为选中状态。
【问题讨论】:
考虑这种方法:<input type="hidden" name="Shift_Trig[$id]" value="0" /><input type="checkbox" name="Shift_Trig[$id]" value="1" $checked />
。如果复选框被选中,它将覆盖隐藏的值,如果没有,隐藏的值将被发送。在我看来,在这种情况下,最合乎逻辑的$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 表单中选中?