小编Eri*_*sse的帖子

如何在T-SQL中使用变量作为数据库名称?

我在我的脚本中的几个地方使用数据库名称,我希望能够快速更改它,所以我正在寻找这样的东西:

DECLARE @DBNAME VARCHAR(50)
SET @DBNAME = 'TEST'

CREATE DATABASE @DBNAME
GO
ALTER DATABASE @DBNAME SET COMPATIBILITY_LEVEL = 90
GO
ALTER DATABASE @DBNAME SET RECOVERY SIMPLE 
GO
Run Code Online (Sandbox Code Playgroud)

但它不起作用.那么编写这段代码的正确方法是什么?

sql-server

121
推荐指数
4
解决办法
19万
查看次数

是否可以在没有模式名称的情况下调用用户定义的函数?

我正在使用MS SQL 2005,当我创建一个函数时,我需要设置模式名称来调用它:

select dbo.MyFunc
Run Code Online (Sandbox Code Playgroud)

我的所有表都是"dbo"模式,我不需要模式名称来引用它,所以我想知道我是否缺少一些可以对函数执行相同操作的配置.

sql-server schema sql-server-2005

17
推荐指数
3
解决办法
9421
查看次数

Delphi默默地裁剪字符串文字

Delphi 2009 Win32.

下面的代码尝试将257长度的字符串添加到备忘录中.它编译并运行正常,但备忘录中没有添加任何内容.

Memo1.Lines.Add('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
Run Code Online (Sandbox Code Playgroud)

看起来像编译器错误.是吗?因为如果字符串长256,我会收到编译错误,无法编译应用程序.

当开发人员尝试做这样的事情时,有什么办法让应用程序中断?

我知道我可以拆分字符串并使这段代码工作,但我的意思是阻止开发人员使用这些无效代码而不注意.

谢谢

delphi delphi-2009

7
推荐指数
1
解决办法
1882
查看次数

是否可以使用DBX以编程方式创建数据库?

看起来TSQLConnection只连接到现有数据库,我找不到另一个允许我向数据库服务器发送命令的组件.

我正在使用Delphi 2009和Firebird以及MSSQL.

提出的一个想法是连接到系统数据库(例如MSSQL中的master或tempdb),然后将create命令发送到服务器.这可能是MSSQL的一个选项,但我不确定Firebird.

我也知道Delphi 2009中新的DBX元数据,但我找不到使用它创建数据库的方法.我发现的所有示例都是修改现有数据库.

sql-server delphi firebird dbexpress dbx

6
推荐指数
1
解决办法
1967
查看次数

在Delphi中比较货币值时如何避免舍入问题?

AFAIK,Delphi Win32中的货币类型取决于处理器浮点精度.因此,在比较两个货币值时,我遇到了舍入问题,根据机器返回不同的结果.

现在我使用SameValue函数传递Epsilon参数= 0.009,因为我只需要2位十进制数字.

有没有更好的方法来避免这个问题?

delphi floating-point winapi currency

4
推荐指数
2
解决办法
7547
查看次数

DLL调用在Delphi 2010中工作,但在Delphi XE2中使用AV

我正在尝试使用Delphi XE2调用使用Delphi 7构建的DLL(在unicode支持之前).代码是这样的:

function Foo(Param1: PChar; Var Param2: DWORD; Var Param3: DWORD): PChar; stdcall; external 'bar.dll';
Run Code Online (Sandbox Code Playgroud)

然后我打电话给:

var
  V1: PChar;
  V2: AnsiString;
  V3, V4: DWORD;

begin
  V1 := Foo(PChar(V2), V3, V4);
  ..
Run Code Online (Sandbox Code Playgroud)

此代码适用于Delphi 2010,但在XE2中,我使用以下堆栈获取访问冲突:

System.UTF8ToUnicodeString(nil)
System.UTF8ToString(nil)
System.TObject.ClassName
Vcl.Forms.IsClass(???,Exception)
Vcl.Forms.TApplication.HandleException($2083120)
Vcl.Controls.TWinControl.MainWndProc(???)
System.Classes.StdWndProc(726196,273,6106,2365402)
:776e77d8 ; C:\Windows\SysWOW64\user32.dll
:776e78cb ; C:\Windows\SysWOW64\user32.dll
:776ef139 ; C:\Windows\SysWOW64\user32.dll
:776eaaa6 user32.SendMessageW + 0x52
:749fb322 ; C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9200.16579_none_8937eec6860750f5\comctl32.dll
:749fb27e ; C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9200.16579_none_8937eec6860750f5\comctl32.dll
:776e77d8 ; C:\Windows\SysWOW64\user32.dll
:776e78cb ; C:\Windows\SysWOW64\user32.dll
:776ebd11 user32.ChangeWindowMessageFilterEx + 0x71
:776ebd39 user32.CallWindowProcW + 0x1c
Vcl.Controls.TWinControl.DefaultHandler(???)
:0048b0c1 TWinControl.DefaultHandler + $DD
:0048afc4 …
Run Code Online (Sandbox Code Playgroud)

delphi dll delphi-xe2

1
推荐指数
1
解决办法
865
查看次数