关于用CB6开发SQL2000SERVER的C/S程序的一些问题向各位大侠请教!

zjsheng 2003-07-12 02:04:09

接手了一个C/S的单子
以前都是单机版的
所以用ADO+ACCESS2000很轻松地就可以搞定了
现在的SQL2000SERVER用起来不熟悉
所以有以下几个问题请教各位大侠 还望不吝赐教 谢谢

用的是 ADOConnect+ADOQuery+DataSource+DBGrid等数据感知控件

打算在一台NT的服务器上安装SQL2000SERVER,Win98客户端安装SQL Client(不知道用了ADO有没有这个必要?)

1、实现记录的独占性有何办法,如果无法独占也没关系,但如何在POST时真正实现服务器上的数据实现更新

2、关于客户端的登录有何限制,在哪里需要进行设置

3、在设计时发现若是一些数据感知组件中显示着相关记录的数据时,DBNav的刷新出出错,提示‘缺少相关列的更新信息’,不知道代码中如何实现数据更新

4、需不需要将ADOQuery换成DataSet,若需要的话,用法和属性设置方面有何区别

5、。。。暂时就几个问题 :)

因为过几天就要交货了,望各位伸出援助之手,谢谢!

分数都没怎么用,还剩好多,到时再加没问题的 :)
...全文
37 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjsheng 2003-09-05
  • 打赏
  • 举报
回复

对于C/S模式的CB程序书籍实在太少且难找了

在写这个程序的过程中发现关于 数值更新 与 数据共享 方面的知识太缺乏了

如果哪位朋友知道哪些好书有介绍的话

就在CSDN的短信息里告诉我一声

小弟先行谢过! :)
liangqihui999 2003-07-28
  • 打赏
  • 举报
回复
关于连接的补充其实ADOConnect的关键是ping connectstring ,拼好了一个string例如
ansistring lsConnectStr="";

lsConnectStr="Provider=SQLOLEDB.1;"+"Password="+"密码"+";Persist Security Info=True;"+"User ID="+"登陆名"+";Initial Catalog="+"登陆数据库"+";Data Source="+登陆主机(或ip)+";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Use Encryption for Data=False;Tag with column collation when possible=False";
adoconnection->connectstring=lsConnectStr;就可以了

to wenw(阿文)对于borland 的东西我不建议用pb的方式直接用update因为可能产生锁或级连更新的问题,borland 内部的访问控件的灵活性和安全性其实还是不错的只是属性过多太层次不够了点(感觉而已borland 不要扔东西),所以上手麻烦点需要点时间罢了,而且对于事务也是由adoconnection->BeginTrans()和adoconnection->CommitTrans()来控制的,所以如果直接用sql语句除了用query查询其他我的建议是少用
liangqihui999 2003-07-28
  • 打赏
  • 举报
回复
1、打算在一台NT的服务器上安装SQL2000SERVER,Win98客户端安装SQL Client(不知道用了ADO有没有这个必要?)
答:用了ado就没有必要了,只要客户端的windows的mdac(一个数据库访问补丁)打到2.6(其实好象2.53就可以了)以上就一定没问题可以访问了。)
ADOConnect等数据感知组件为什么要放在窗口上,DM(data modal)这个不可视组件不就是专门干这个的吗?在用到的窗口里include一下就可以用了。
2、数据库的访问其实一般建议为某个特定的应用建立专用的访问用户帐号(安全,不要老sa连),而且连接的服务器名称,登陆名及pass都可以放在注册表里(搞个加密规则),比放在ini文件里高级一点也不大怕被手快的删掉
3、在编辑和post时要保证感知组件的option选项isedit为true(还有一些属性兄弟你就望文生意吧就)否则是post不了的
wenw 2003-07-28
  • 打赏
  • 举报
回复
这个是因为你在添加记录时候有些字段没有添加,SQL自动加上了相关的值(默认值或者公式计算得到的值),所以你再次修改时候如果没有重新生成记录集就会出这个错误,解决方法如下:
方法1:每次修改记录前重新执行一次查询得到最新的记录集,然后再修改就不会出错。
方法2:不要用数据感知控件直接修改,自己直接用update语句来修改。
大家有什么高见请指出来!
zjsheng 2003-07-28
  • 打赏
  • 举报
回复

多谢各位仗义相助
目前就剩一个问题了:

就是出现这种情况
一条记录第一次修改可以正确保存
但保存后再修改在再次保存时会提示"缺少相关列值的更新信息"
具体的提示信息可能不是这样子
但差不多就是这个意思
这让我百思不得其解
是否哪里的设置没设好?
还是....

有哪位知道的还请赐教,谢谢!
wenw 2003-07-28
  • 打赏
  • 举报
回复
只要查询的结果是唯一的,就可以用update语句(不是用update方法)来更新表。当然要正确显示出来还是要查询一下才可以的。
jddj007 2003-07-18
  • 打赏
  • 举报
回复
那为什么我在一台没有安装sql的机器上无法连接,但换了一台装了sql的机器就连接成功了呢?
zb007 2003-07-17
  • 打赏
  • 举报
回复
学习啊
hong668 2003-07-16
  • 打赏
  • 举报
回复
问题解决就好,本来客户端就可以不用安装SQL CLIENT的。
zjsheng 2003-07-16
  • 打赏
  • 举报
回复

多谢各位
数据库用备份与还原的办法搞定了
昨天拿着演示版去安装时才发现原来客户那里只有一台电脑 Faint...
早知道用ACCESS了
不过也好
反正总是要学这些东东的 :)

TO:jddj007(因为bcb成为白痴的人)

按道理像我这样用那些组件客户端是不用安装SQL Client的
不过还没真正试过
还请高人指点
jddj007 2003-07-15
  • 打赏
  • 举报
回复
借地方问一下,如果我要用MSSQL2000开发C/s模式程序时,客户端不想、安装MSSQL的客户端可不可以,如果可以要怎么设置?
zjsheng 2003-07-14
  • 打赏
  • 举报
回复
谢谢各位

loking(loking) 的配置文件方法我会采纳的谢谢,这会使移植方便很多。

还有:

1、我在本机上设好的数据库要如何复制到客户的服务器上去

2、SQL2000SERVER 用个人版的没问题吧 客户端在10个以内
hong668 2003-07-14
  • 打赏
  • 举报
回复
1,把你机子上的那两个文件.mdf和.ldf文件在你的机子SQL服务停止后拷贝下来,
到服务器上右键附加数据库后,选中拷贝的文件就可以了。也可直接在你的机子上备份数据后去目标机子上还原。
2。如果在10以下用SQL肯定没有问题,但是数据量不能太大,10万条以上就会很慢了。
myan18 2003-07-13
  • 打赏
  • 举报
回复
我的思路跟yangfan369(扬帆远行)的基本一样.
只是我建议把ADOConnect,及各个单据所用到的公表单独放在一个窗体上,这
样增加了我们代码和组件的重用性!
wangxd 2003-07-13
  • 打赏
  • 举报
回复
1.设置tadoquery的locktype属性
2.通过connectstring属性设置连接参数以及口令,建议利用ini配置文件的方式,比较灵活
3.尽量不要用数据感知控件,在某些时候方便,在某些时候太死
4.没必要把^_^
yangfan369 2003-07-12
  • 打赏
  • 举报
回复
我的做法:
在应用程序主窗体上放一ADOConnect,然后程序中所有ADOQuery都用它,这样可以只与服务器连接一次就行,而且要改为单机版,只需要对这一个ADOConnect修改就可以了,具体方法参见楼上。
loking 2003-07-12
  • 打赏
  • 举报
回复
1。我的做法是在一台NT的服务器上安装SQL2000SERVER,然后在客户端放一个ini配置文件,文件的内容如下:
[server]
name=dbservername //为SQL2000SERVER的服务器的名字
然后在ADOConnection的connectionstring中手工配置连接语句
例:
try
{
char buf[80];
String xx=ExtractFilePath(Application->ExeName)+"setupx.ini"; //一个ini配置文件
ado_conn->Close();
GetPrivateProfileString ("server", "name","zsl",buf, 80,xx.c_str()); //读取SQL服务器
ado_conn->ConnectionString="Provider=SQLOLEDB.1;User ID=sa;Initial Catalog=wzgz;Data Source="+String(buf) ;
ado_conn->Open();
}catch(...){
MessageBox(Handle,"数据库打开失败,请检查数据服务器是否打开或配置文件是否丢失!","提示",MB_OK+MB_ICONINFORMATION);
}

2。单独建一个表存放用户信息
3。‘缺少相关列的更新信息’//可能是你没有建key键吧
4。没有必要
xu_xinyu 2003-07-12
  • 打赏
  • 举报
回复
1.利用trasaction
2.使用ado需要把服务器的ip,user,password,databasename当作参数。
3.不主张大量的使用数据感知组件,太死。
4。没有必要。
zjsheng 2003-07-12
  • 打赏
  • 举报
回复
好象没什么人气啊
顶一下先 :)

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧