各位高手,小弟有些关于delphi下开发SQL数据库的问题想不通,请各位指教。 ^_^(100分)

  • 主题发起人 主题发起人 Yuka
  • 开始时间 开始时间
Y

Yuka

Unregistered / Unconfirmed
GUEST, unregistred user!
我在搞一个数据库,用的是delphi 5.0,远程服务器用的是MS SQL 7.0,我把所有的数据模块都放入DataModule里了。开始时还没什么问题,不过编了一段时间后就有怪问题出现,我怎么也想出不答案。
1)关于存储过程模块的问题。我想用StoredProc模块来调用SQL服务器上的存储过程,
其中有一句:Params.CreateParam (ftString,'@BookName',ptInput);
当StoredProc模块放在DataModule里的时候,一但按Delphi的run按钮就报错,说ftString没有定义,当我把StoredProc模块放在程序窗体上(而不是放在DataModule里)的时候,这个错误就没有了!只是放的位置不同啊,怎么会有这么大的差别呢?我想把StoredProc模块放在DataModulej里,希望大家能帮我找到答案。
2)关于存储过程参数(Param)的问题,我看过好一些书,上面写着SQL 7.0支持向程序传送参数资料。这的确可以,但只能在程序设计期间,当修改StoredProcName属性时候,就能在Params里看到该存储过程的参数。不过当我想在程序里动态改变StoredProcName的时候,服务器上的参数就不会传过来了!我只好自己创建这些参数,虽然问题解决了,不过当有一些要使用相当数量的参数或参数名比较长的存储过程,手动创建参数就比较麻烦了,我还是想找个办法从服务器上取得参数的资料。我试过用prepare,不过不行,在帮助文档里也找不到从服务器上提取参数资料的函数或过程。有没有什么办法从SQL服务器上提取参数资料呢?
3)我有一个有返回值的存储过程,返回值的定义为 @Result int =0 output,我用StoredProc模块调用这个存储过程后,用ParamByName('@Result').AsInteger发现@Result的值并没有改变,也就是说服务那边并没有返回@Result的值给程序,这是为什么呢?另外我在创建@Result这个参数时已经明确地声明这个参数是一个返回值了,语句为:Params.CreateParam (ftInteger,'@Result',ptOutput);
4)Delphi中有没有Delay(延时)一类的函数?叫什么?没有这一类函数的话,一定要用到定时器(Timer)吗?
5)我的程序是基于两层的C/S模型,它可以在Internet上使用吗?我查过一些书,好像一定要搞成三层的才可以,这是真的吗?
6)我使用DataBase模块来连接SQL服务器,而不是用BDE Administrator定义的BataBase连接,因为我想使到我的程序可以动态改变所登录的服务器。因为有时可能会出现有一台服务出错。在服务器出错而当机或者根本没有开的时候,但用户却不知道,于是会出现那个用户登录的时候就出现程序卡死的情况(程序认为服务器是在运行当中,不断地连接),虽然过一段很长的时间后程序会恢复运行状态,不过用户要等太多时间了,有没有办法可以在登录过程中退出登录呢?或者设置连接超时的时值呢(好像根本没这个参数啊)?我看过一篇文章,说SQL 7.0在用户读取数据时是不许中断的,这是真的吗?上面那种程序卡死的状态是在服务器没有开或者当机的时候才出现啊,如何用程序做到避免这种情况发生呢?用Ping主机的方法吗?我可没有学过internet编程,不知道难不难呢?

哈哈,我真是个问题少年啊,希望大家能耐心的帮我解答,如果答案涉及到比较详细的编程过程,可以寄EMAIL给我,也可以在论坛上简要说明一下。我的EMAIL是uhika@163.net。我真是很想弄明白这些问题,它们已经困扰我相当的时间了!!在这里我先向大家说声多谢!!!呵…………… ^_^
 
COW,这。。。

1、2、3: StoredProc控件个人也觉得很奇怪,我也常遇到这个问题。后来通通换成TQUERY来干了,
一点问题也没有了。
4 :SLEEP()
5 :完全可以。
6 :什么意思??
 
4。delphi 中好象没有 delay 这样的函数,吴兄说的 sleep 是 API;
6。登录的时候判断失败次数,不要不停登录
 
有几点我想补充的:
1)但我想用StoredProc来调用存储过程啊,这样移植性会好一些,以后可以用其它的SQL服务
器,而不用考虑SQL语法的兼容性,我知道各家出的SQL服务在语法上都有不同。

2)最后一个问题其实是关于登录超时,我没办法好像Http的timeout设置一样设置超时的时限,
而我也不是不断地尝试登录上SQL服务器,只是登录一次就要等非常久的时间(起码10分钟),
我想可以设置成登录一两分钟内还连不上服务器的话,就断开连接。就这么简单,不过我不会做,呵呵。

3)我问这么多问题,我给的分数是不是太少?可不可以开多奖分呢?不过我是第一次用这种
给分的系统,虽然账号是以前注册的,不过是第一次使用,我提出问题的内容也是先在记事
本里打出来再贴上来,所以显示效果很差。这个BBS系统不会自动换行好像挺麻烦的,不过
人气足是好事………


 
0.注意换行!太难看了:-)
1.uses 的单元缺少了一两个吧,
2.解决了就好
3.storeproc1.field[0].value就是你的result,(假如你的过程只返回一个参数)
4.sleep只在多线程才有效,在单线程,对不起,用timer吧
5.一定可以
6.我觉得只能另建一个监视线程来计时,不过能否强行中断登录,未试过.
3).分确实有点少:-)
 
Sleep在单线程中同样好用!
诊测到服务器的网络状态,如果不通则处理!
 
>>sleep只在多线程才有效,在单线程,对不起,用timer吧
没听说过。我在单线程里用的非常好。

 
多人接受答案了。
 
后退
顶部