使用TTable控件操作MS SQL时,TTable将给表上锁(我不注意到TTable是否有设置共享打开的属性),dephi出于性能上考虑TTable将在必要时才从Server端提取下一批数据,当表中数据量大时,锁将持续长时间,当另一连接要企图以独占方式锁记录或表时,将发生等待(出现SQL沙漏)。你可以在ms SQL服务器上的管理器中的观察连接视图中看到红色堵塞。
如果真是这样,你优化你的查询,使它尽可能快,而查询是TQuery的强项,另外在操作SQL server时TQuery比TTable更有性能速度的优越,你应尽可能使用它。
如果真是这样,你优化你的查询,使它尽可能快,而查询是TQuery的强项,另外在操作SQL server时TQuery比TTable更有性能速度的优越,你应尽可能使用它。
解决方案 »
- D7 中我想实现用易个线程给ListBox中写系统运行日志?如何实现??我写的代码不知道那里有问题
- 非常唔错的~~天蓝色~简结线条版~~风格包下载
- 一个奇怪的数据链接问题,搞了三天了还不行,急?大家帮一帮手
- 我要选专业~~~帮我看下哪个好
- 请教一个insert触发器的写法。
- ---->>>>关于用delphi发邮件的问题,回复即有分!!
- 要在程序中控制在DBCHART显示不同颜色部分的内容及数值,如'34 丰田',来者有分?
- 口令加密问题
- 报表横列数据问题,一定结帐
- dong163(瑞雪)兄,你說詳細一點??我很笨
- 我是小虾,想问个很简单的问题...
- 有谁可以帮忙解释一下具有变体部分的记录类型
多谢各位关心我的问题,
但有几点补充:
我的所有查询都是使用存储过程和QUERY来完成据说这样的运行可减少死锁的发生。
观察联接视图是不是指TRACE?
好象是在RUN时才有效,而SQL SERVER 的DEFAULT
为无限长就是永远等待下去。
我想你现在的问题是优化你的查询。加入索引应该会有帮助的,这要根据你的系统中经常用到的查询来制订方案了。你的查询规模是否太大?如果是查询规模是太大造成的,你要重新设计你的查询。注意利用MS SQL管理器帮你找到问题所在。
祝你好运。
2.仔细看看的存储过程是不是有优化余地;
3.最后看看的DELPHI代码有没有优化的余地, 如做缓冲等
DELPHI中如何做缓冲???
以下是微软公司预计发布的Windows2000的新特性 1.可能取消99%的键盘按键 2.每次启动前必须先输入社会安全号码 3.按任意键继续或任意键取消 4.按任意键除了...,(不,不,不.......这条取消) 5.按Ctrl+Alt+Del,开始一个IQ测试 6.闭三次眼睛等于按一次[Esc] 7.Badcommandorfilename!将出现在屏幕角落 8.“请稍后,准备关闭Windows,是否进行新GAME?” 9.系统提示:“文件保存错误,是否格式化硬盘?(Y/Y)” 10.来自GATES上帝的信息:“重启动世界,请注销” 11.要关闭你的机器,请输入“WIN” 12.Breakfast.syshalt食物Plug-in端口初始化错误 13.coffee.vxdmissing,请插入一个杯子然后按任意键继续... 14.congress.dll错误,重启动Washionton.D.C.?(Y/N) 15.FilenotFound,是否要伪造一个? 16.BadorMissingMouse,改用CAT? 17.RuntimeError6Dat417A:32CF,盗版用户! 18.读FAT区错误:换一张?(Y/N) 19.致命错误16547:LPT1notfound,使用备份设备(Pencil&Paper.sys) 20.User64.dllError:请换个用户 21.WindowsVirusScan1.0-“Windows2000病毒被发现,是否清除它?” 22.启动信息:欢迎来微软的世界---您的义务就是付钱! 23.如果您是艺术家,您应该感到BILL先生正拥有您和您的全部作品.是否很有安全感? 24.您的硬盘在运行SCANDISK2000后出现:“您的所有盗版软件已经被删除,并且警察正在来的路上:)”
2.存储过程对表的修改保持一致的顺序。
3.不要用DBGrid等控件实现对数据的查询,而用Query调用存储过程读出数据后自己在StringGrid里填充 。
太老了? 我的脸可就丢大了,那来点新鲜的吧!!!
一天,一个地狱的使者找到Bill Gates,对他说:我有两个消息要告诉你,
一个是好消息,一个是坏消息,你要先听哪一个?GATES想了想,说
我要先听好消息。地狱的使者说:好消息是地狱里的所有的操作系统
都是你的WINDOWS了!!哦,这真是个好消息,GATES说,那坏消息呢?
坏消息是,地狱的使者说;现在WINDOWS出了些问题,你要和我下去修理?!
关键:
1、在程序中确实存在对不同的表单的操作顺序不一致的地方。
我使用了一个表用来生成唯一编号,SQL SERVER中也有这样功能,
但我决得不好用,对于这个表单的访问较频繁。但我忽视了对它的
操作。
2、在我使用PROFILER来跟踪系统的DEADLOCK和STORED PROCEDURE 的运行,
终于发现是对该表及其他相关表单的操作时发生DEADLOCK。。
再往下就好办多了
3、还有些不明白的地方如PROFILER 在TRACE时的CPU、READ,WRITES是什么,
当CPU值如果指占用CPU的比例话,在CPU值高于多少时应警惕??
4、请教ROCHESTER:为什么不能用DBGRID来显示用存储过程查询来的数据???
我看过它的代码好象没什么问题?
5、我在数据库专题中也发了相同问题,
也有200分相送各位请到那边发贴,我好送分。
关键:
1、在程序中确实存在对不同的表单的操作顺序不一致的地方。
我使用了一个表用来生成唯一编号,SQL SERVER中也有这样功能,
但我决得不好用,对于这个表单的访问较频繁。但我忽视了对它的
操作。
2、在我使用PROFILER来跟踪系统的DEADLOCK和STORED PROCEDURE 的运行,
终于发现是对该表及其他相关表单的操作时发生DEADLOCK。。
再往下就好办多了
3、还有些不明白的地方如PROFILER 在TRACE时的CPU、READ,WRITES是什么,
当CPU值如果指占用CPU的比例话,在CPU值高于多少时应警惕??
4、请教ROCHESTER:为什么不能用DBGRID来显示用存储过程查询来的数据???
我看过它的代码好象没什么问题?
5、我在数据库专题中也发了相同问题,
也有200分相送各位请到那边发贴,我好送分。
关键:
1、在程序中确实存在对不同的表单的操作顺序不一致的地方。
我使用了一个表用来生成唯一编号,SQL SERVER中也有这样功能,
但我决得不好用,对于这个表单的访问较频繁。但我忽视了对它的
操作。
2、在我使用PROFILER来跟踪系统的DEADLOCK和STORED PROCEDURE 的运行,
终于发现是对该表及其他相关表单的操作时发生DEADLOCK。。
再往下就好办多了
3、还有些不明白的地方如PROFILER 在TRACE时的CPU、READ,WRITES是什么,
当CPU值如果指占用CPU的比例话,在CPU值高于多少时应警惕??
4、请教ROCHESTER:为什么不能用DBGRID来显示用存储过程查询来的数据???
我看过它的代码好象没什么问题?
5、我在数据库专题中也发了相同问题,
也有200分相送各位请到那边发贴,我好送分。
作者 Peter Kovach下面的例子告诉您如何建立一束光线并且将它设置为一束 黑光:
//
// g_lpD3D3 holds the address of an IDirect3D3 interface
//
LPDIRECT3DLIGHT g_lpD3DLight;
HRESULT hr;
hr = g_lpD3D3->CreateLight (&g_lpD3DLight, NULL);
if (SUCCEEDED(hr))
{
//
// g_lpD3DLight variable is a valid pointer to an IDirect3D3 interface.
//
D3DLIGHT2 g_light;
HRESULT hr;
//
// Initialize the structure
//
ZeroMemory(&g_light, sizeof(D3DLIGHT2));
g_light.dwSize = sizeof(D3DLIGHT2); // MUST set the size!
//
// Create our Dark point light.
//
g_light.dltType = D3DLIGHT_POINT;
g_light.dcvColor.r = -0.5f;
g_light.dcvColor.g = -0.5f;
g_light.dcvColor.b = -0.5f;
//
// Position the light high in the scene, and behind the viewer.
// These coordinates are in world space, so
// the viewer could be anywhere in world space.
// For this example, the viewer is at the origin of world space.
//
g_light.dvPosition.x = 0.0f;
g_light.dvPosition.y = 1000.0f;
g_light.dvPosition.z = -100.0f;
//
// Don't attenuate
//
g_light.dvAttenuation0 = 1.0f;
g_light.dvRange = D3DLIGHT_RANGE_MAX;
//
// Make the light active light.
//
g_light.dwFlags = D3DLIGHT_ACTIVE;
//
// Set the property info for this light.
// We have to cast the LPD3DLIGHT2 to be
// an LPD3DLIGHT.
//
hr = g_lpD3DLight->SetLight((LPD3DLIGHT)&g_light);
if (SUCCEEDED(hr))
{
//
// Add the light to the viewport here.
//
}
else
return hr;
}
else
return hr;