社区
数据库及相关技术
帖子详情
三层的数据库程序中主细表数据的插入和删除问题
fyje
2000-12-13 11:07:00
我刚用C++Builder编写三层的数据库程序,就遇到了难题:
使用巢状数据表实现Master/Detail的应用系统时,发现修改没问题,而主表和细表的插入、主表删除不能进行,主表插入错误提示“键强制”,细表插入提示“没有正确的主表记录”。主表删除提示“不能删除一个带有细表的主记录”,我先删除细表记录,再删主表记录也出错,请教各位大虾,帮助解决,谢谢。
...全文
98
2
打赏
收藏
三层的数据库程序中主细表数据的插入和删除问题
我刚用C++Builder编写三层的数据库程序,就遇到了难题: 使用巢状数据表实现Master/Detail的应用系统时,发现修改没问题,而主表和细表的插入、主表删除不能进行,主表插入错误提示“键强制”,细表插入提示“没有正确的主表记录”。主表删除提示“不能删除一个带有细表的主记录”,我先删除细表记录,再删主表记录也出错,请教各位大虾,帮助解决,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
comanche
2000-12-14
打赏
举报
回复
不知道你服务器用什么连接
Master/Detail是在服务器实现还是在客户机实现
.在服务器时最常出现的事就是 record changed by another user 但可以改 DataSetProvider的UpdateMode为KeyOnly,如果还不行就要放两个UpdateSQL在服务器上(针对BDE),响应DataSetProvider的OnUpdateRecord, 在这可以 if ( SourceDS == 主表 )就更新主表 else更新子表(master/detail时是子表先更新再主表), 对于服务器使用UpdateSQL要自已写一个SetParams函数(这个函数4.0不能用),我贴在下面
.在服务器还有一个问题,如果用BDE连接会使detail表始终打开,也就意味着一定要占用一个session. 就没法作session pooling, 所以只好响应DataSetProvider的AfterGetRecord关闭子表
.如果在客户机实现那就大大的不一样了,我不这么做
.不知道你想不想知道ADO连接是怎样做的, 想知道我下次贴给你
//---------------------------------------------------------------------------
void __fastcall SetParams( TUpdateSQL *UpdateSQL,
TClientDataSet *DeltaDS, TUpdateKind UpdateKind )
{
if ( UpdateSQL->DataSet == 0 )
return;
TQuery *UpdateQuery = UpdateSQL->Query[UpdateKind];
for ( int i = 0; i < UpdateQuery->Params->Count; i ++ )
{
TParam *Param = UpdateQuery->Params->Items[i];
AnsiString ParamName = Param->Name;
bool IsOld = ParamName.AnsiPos( "OLD_" ) == 1;
if ( IsOld == true )
ParamName = ParamName.Delete( 1, 4 );
TField *Field = DeltaDS->FindField( ParamName );
if ( Field == 0 )
continue;
if ( IsOld == true )
Param->AssignFieldValue( Field, Field->OldValue );
else
{
Variant Value = Field->NewValue;
if ( Value.IsEmpty( ) == true )
Value = Field->OldValue;
Param->AssignFieldValue( Field, Value );
}
}
}
//---------------------------------------------------------------------------
fyje
2000-12-14
打赏
举报
回复
看来你是高手了,我刚使用bcb编程序,还有很多问题弄不懂,希望能得到你更多的帮助
问题我已经搞清楚了,原因是主表中连接字段不唯一造成的,谢谢你的帮助
交个朋友好吗,我的oicq:3577335 ,email:fyje@sina.com
MySQL DML 语言(
插入
、更新与
删除
数据
)
#
插入
、更新与
删除
数据
MySQL中提供了功能丰富的
数据
库
管理语句,包括有效地向
数据
库
中
插入
数据
的 INSERT 语句,更新
数据
的UPDATE语句以及当
数据
不在使用时
删除
数据
的DELETE 语句等。 # 高阶 DML 操作 将...
如何防止
插入
删除
表
造成的
数据
库
死锁
在
数据
库
中经常会遇到这样的情况:一个
主
表
A,一个子
表
B,B
表
中包含有A
表
的
主
键作为外键。当要
插入
数据
的时候,我们会先
插入
A
表
,然后获得A
表
的Identity,再
插入
B
表
。如果要进行
删除
操作,那么就先
删除
子
表
B,然后再...
SQL(创建新
表
导入
数据
)
3 在新建的
数据
库
中新建一个
表
,添加所需要的
数据
后, 要设计一个ID;在ID列名设计
主
键,然后设计标识符;保存。 4 可以在创建的
数据
库
中导入
数据
,点中新建
数据
库
右键任务导入
数据
; 选择需要的路径: 路径:...
如何同时修改
数据
库
中两个
表
数据
,并保证两次修改同时成功或者失败
如何同时修改
数据
库
中两个
表
数据
,并保证两次修改同时成功或者失败。 假如:A
表
收入
表
、B
表
为商品售出记录
表
,每卖一件商品,B创建一条出售记录,A根据B的
主
键创建一条收入信息, A
表
为的外键是B
表
的
主
键,售出一...
6.9 用Python操控
数据
库
(批量
删除
,百度新闻
数据
爬取与存储,写入
数据
时进行去重处理,pandas读取sql
数据
)
学习完MySQL
数据
库
的基本操作后,下面来学习如何用Python连接
数据
库
,并进行
数据
的
插入
、查找、
删除
等操作。 6.9.1 用PyMySQL库操控
数据
库
上一节在phpMyAdmin 中创建了
数据
库
“pachong”,并在其中创建了
数据
表
...
数据库及相关技术
1,178
社区成员
18,939
社区内容
发帖
与我相关
我的任务
数据库及相关技术
C++ Builder 数据库及相关技术
复制链接
扫一扫
分享
社区描述
C++ Builder 数据库及相关技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章