小编kob*_*bik的帖子

使用CreateOleObject后释放OleVariant

这是一个简单的代码:

procedure Test;
var
  V: OleVariant;
begin
  V := CreateOleObject('ADOX.Catalog');
  try
    // do something with V...
  finally
    V := Unassigned; // do we need this?
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我们是否需要V := Unassigned在最后使用代码,或者V当它存在于Test程序范围内时是免费的吗?在VB中,您将变量设置为Nothing.我们需要在这做同样的事吗?即:

function VarNothing: IDispatch;
// emulate VB function SET VarX = Nothing
var
  Retvar: IDispatch;
begin
  Retvar := nil;
  Result := Retvar;
end;

// do something with V and finally:
V := VarNothing;
Run Code Online (Sandbox Code Playgroud)

delphi activexobject

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

在delphi中使用WebKit(Safari兼容)来模拟iPhone手机

有没有人在Delphi中成功使用过WebKit

WebKit是一个开源的Web浏览器引擎.WebKit也是Safari,Dashboard,Mail和许多其他OS X应用程序使用的引擎的Mac OS X系统框架版本的名称.

我想创建一个与电子设备相同的iPhone/iPad移动模拟器.(我试过免费版 - 似乎它也使用Adobe AIR).

使用Safari浏览器,我们可以为iPhone移动网站提供最准确的预览结果.所以我想在我的应用程序中嵌入WebKit(Safari使用),这样我的客户就可以对他们的移动网站进行可靠的预览.

我在网上搜索过,但找不到合适的代码.(我能找到的最好的是这个,但它不起作用).


Delphi Chromium Embedded在答案中提出的3个主要问题是:

  • 它不支持D5
  • 我可以克服这样一个事实,即不支持D5(在单独的进程或DLL中创建带有D7的组件)但是,它非常不稳定!我用D7测试了它:随机访问违规.
  • 它不会渲染具有div布局/ HTML5的HTML页面与Safari一样(或者电动 - "电动移动模拟器").

delphi iphone safari webkit delphi-5

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

格式函数vs sql注入方案中的参数?

我知道sql语句中参数的用法,但只是为了好奇,使用Format函数来防止sql注入而不是使用参数是安全的.

喜欢这个样本

sCustomer : string
begin
 AdoSql.CommandText:=Format('Select SUM(value) result from invoices where customer=%s',[QuotedStr(sCustomer)]);
end;
Run Code Online (Sandbox Code Playgroud)

sql delphi sql-injection

7
推荐指数
3
解决办法
1608
查看次数

TADOQuery连接表 - 从结果中插入\删除记录

使用单个TADOQueryi使用左外连接从两个不同的表中提取记录:

Select M*, D.* from Courier M Left outer join Courier_VT D on M.Courier_Identifier = D.FK_Courier_Identifier
Run Code Online (Sandbox Code Playgroud)

我用a TDBGrid来成功地将字段更新发布到我的MSSQL DB.

由于有外键引用(FK_Courier_IdentifierCourier_Identifier)我插入记录时出错,

无法将值Null插入列'FK_Courier_Identifier',表Courier_VT; 列不允许null

但是在Courier表中发布了一条记录,我知道我需要在发布之前分配Courier_IdentifierFK_Courier_Identifier,但不知道如何以及在何处进行

我们如何在此场景中插入\删除记录?是否有可能实现单一使用TADOQuery

sql-server delphi ado

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

从TStringList中删除空字符串

Delphi中是否有任何内置函数可以删除TStringList空的所有字符串?

如何遍历列表以删除这些项目?

delphi vcl

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

列表索引超出TPageControl的范围

我遇到了一个表现出一些奇怪行为的TPageControl.

控件有3页,但是当我这样做

for I:=0 to PageControl.PageCount-1 do begin
  PageControl.Pages[I].TabVisible := False;
  PageControl.Pages[I].Visible    := Ord(iColorScale.GenerationMode) = I;
end;
Run Code Online (Sandbox Code Playgroud)

执行循环的第一次迭代的第一行时,我得到一个'List index out of bounds(3)'错误

PageControl.Pages[0].TabVisible := False;
Run Code Online (Sandbox Code Playgroud)

现在,当我在调试器中查看PageControl属性时,一切似乎都是有序的.PageCount预计为3,我可以在评估器中看到所有页面及其属性,包括第0页的TabVisible

我在Windows 7机器上使用Delphi XE ..有谁知道发生了什么?我不知所措.

delphi tpagecontrol delphi-xe

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

在默认浏览器中打开网页,在网址内加双引号(")

当我尝试在链接中打开任何具有双引号(")的站点时,例如.user.php?name="stackoverflow"它只是削减"或有时它重定向到谷歌!?二手代码:

ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;
Run Code Online (Sandbox Code Playgroud)

browser delphi winapi delphi-7

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

如何在SRT(SubRip)文件中纠正/移动字幕时间?

如何正确地向前和向后移动字幕时间?字幕时间格式如下所示: 00:00:52,656 --> 00:00:56,326

如果字幕和音频不同步,例如,在语音/音频之前显示字幕,00:00:52,656 --> 00:00:56,326则应校正字幕行的所有时间(时间格式:).

因此,如果所有字幕行的时间必须改变/移位2秒.然后,这次是字幕行:00:00:52,656 --> 00:00:56,326应该改为: 00:00:54,656 --> 00:00:58,326.

这指的是字幕文件中的所有时间,而不仅仅是一行文本/一次.


SubRip(.srt)文件的示例:

1
00:00:52,656 --> 00:00:56,326
Kanalska Zona: Panama

2
00:00:56,335 --> 00:00:59,755
Francuzi su pokušali da izgrade
kanal pre Amerikanaca.
Run Code Online (Sandbox Code Playgroud)

delphi shift subtitle

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

是否有任何简单的方法来比较连接字符串而不自己解析它?

我需要能够将两个不同的连接字符串进行比较,并确定它们是否是相同的信息.我不能进行简单的字符串比较,因为属性可以以不同的方式布局,但仍然代表相同的连接.

在我为此写下自己的比较之前,是否已经可以做到这一点?

我已经找到了一种方法,我找不到任何关于此的内容.

delphi ado delphi-xe2

6
推荐指数
2
解决办法
1098
查看次数

无法将空字符串传递到非空数据库字段

我很难接受一些非常直截了当的事情.我有一个SQL Server数据库,我正在尝试使用空字符串更新不可为空的varchar或nvarchar字段.我知道这是可能的,因为空字符串''一样的东西NULL.但是,使用它TADOQuery,它不允许我这样做.

我正在尝试更新现有记录,如下所示:

ADOQuery1.Edit;
ADOQuery1['NonNullFieldName']:= '';
//or
ADOQuery1.FieldByName('NonNullFieldName').AsString:= '';
ADOQuery1.Post; //<-- Exception raised while posting
Run Code Online (Sandbox Code Playgroud)

如果字符串中有任何内容,即使只是一个空格,它也会像预期的那样保存得很好.但是,如果它是一个空字符串,它会失败:

不可为空的列无法更新为Null.

但它不是空的.它是一个空字符串,应该可以正常工作.我发誓我过去曾多次通过空串.

为什么我会收到此错误,我应该怎么做才能解决它?


额外细节:

  • 数据库:Microsoft SQL Server 2014 Express
  • 语言:Delphi 10 Seattle Update 1
  • 数据库驱动: SQLOLEDB.1
  • 正在更新的字段: nvarchar(MAX) NOT NULL

sql-server delphi ado sql-server-2014 delphi-10-seattle

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