小编No'*_*man的帖子

德尔福不会运行

如果我尝试运行Delphi 7,我会收到这条可怕的消息:

发现了Borland许可证信息,但它对Delphi无效.没有这些信息,你无法运行Delphi.单击退出按钮以退出Delphi.

今天早上Delphi运行正常,但是当我试图加载我正在处理的项目时,它很窒息.

  • 我从原始磁盘重新安装了Delphi - 同样的消息
  • 我刚刚完成了几天前的系统还原 - 同样的消息

我不知道为什么.

delphi delphi-7

28
推荐指数
3
解决办法
2万
查看次数

如何使用dbExpress从Firebird获取表描述(字段和类型)

我编写了一个使用TSQLConnection的GetTableNames和GetFieldNames方法显示数据库结构的工具.如何获取每个字段名称的类型类似于以下列表(这是构建表所需的DDL的一部分)?

TABLE: ARTICLES
ID INTEGER NOT NULL
PRINTED SMALLINT DEFAULT 0
ACADEMIC SMALLINT
RELEVANCE SMALLINT
SOURCE VARCHAR(64) CHARACTER SET WIN1251 COLLATE WIN1251
NAME VARCHAR(128) CHARACTER SET WIN1251 COLLATE WIN1251
FILENAME VARCHAR(128) CHARACTER SET WIN1251 COLLATE WIN1251
NOTES VARCHAR(2048) CHARACTER SET WIN1251 COLLATE WIN1251
Run Code Online (Sandbox Code Playgroud)

delphi firebird dbexpress

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

检测'文本'文件类型(ANSI与UTF-8)

我在Delphi(7)中编写了一个应用程序(心理测试考试),它创建了一个标准的文本文件 - 即该文件的类型为ANSI.

有人将程序移植到Internet上运行,可能使用Java,生成的文本文件类型为UTF-8.

读取这些结果文件的程序必须读取Delphi创建的文件和通过Internet创建的文件.

虽然我可以将UTF-8文本转换为ANSI(使用狡猾命名的函数UTF8ToANSI),但我怎么能提前告诉我有哪种文件?

看到我'拥有'文件格式,我想最简单的处理方法是在文件中放置一个已知位置的标记,这将告诉我程序的来源(Delphi/Internet),但这似乎作弊.

提前致谢.

delphi utf-8 delphi-7

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

添加快捷方式以编程方式添加系统菜单选项

在我的应用程序中,我有一个基本表单,其中各种项目添加到系统菜单中,例如

 AppendMenu (SysMenu, MF_SEPARATOR, 0, '');
 AppendMenu (SysMenu, MF_STRING, SC_Sticky, 'Sticky');
 AppendMenu (SysMenu, MF_STRING, SC_Original, 'Original');
Run Code Online (Sandbox Code Playgroud)

如何为这些菜单选项添加键盘快捷键(例如Alt-F2,Alt-F3)?

我无法使用加速器的标准方法(即Sticky for Alt-S),因为真正的菜单标题是希伯来语,加速器似乎无法正常使用这种语言.

delphi keyboard-shortcuts delphi-7

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

Word 2010自动化:'转到书签'

我有一个用Delphi-7编写的程序,它打开一个基于模板的新Word文档.
文档打开后,自动跳转到书签(在模板中预定义)并在那里添加一些文本.
下面的代码在Word 2003中正常工作但invalid variant operation在Word 2010中导致错误消息(try/except为了清楚起见,我省略了块).

wrdapp:= CreateOleObject ('Word.Application');
wrdDoc:= wrdapp.documents.add (wrdApp.Options.DefaultFilePath[wdUserTemplatesPath] + '1.dot'
wrdApp.selection.goto (wdGotoBookmark, unassigned, unassigned, 'B1')
Run Code Online (Sandbox Code Playgroud)

如果我用第三行替换

wrdDoc.bookmarks.item ('B1').select
Run Code Online (Sandbox Code Playgroud)

该程序在Word 2003中运行良好,但仍然在Word 2010中崩溃.

Word 2010"转到"书签的正确代码是什么?

delphi automation ms-word delphi-7

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

dbExpress /未指定密钥

我正在使用dbExpress组件(Delphi 7)开发数据库程序.通过以下组件从数据库中检索数据:TSQLDataSet - > TDataSetProvider - > TClientDataSet - > TDatasource - > TDBEdit.到目前为止,表格已正常运作.TSQLDataset中的查询是

select id, name, byteken, timeflag from scales where id = :p1
Run Code Online (Sandbox Code Playgroud)

我在数据库表中添加了一个大的(2048)varchar字段; 当我将此字段添加到上面的查询(并将TDBMemo或TDBRichEdit连接到TDatasource)时,当我尝试编辑新文本字段中的值时,我收到以下消息

Unable to find record. No key specified.
Run Code Online (Sandbox Code Playgroud)

当表单上没有TDBMemo时(但在查询中使用varchar字段),我得到相同的错误.一旦从查询中删除varchar字段,一切都可以正常工作.

可能是造成这个问题的原因是什么?

====更多信息====

我现在已经在表单中定义了持久字段.保存表的键的字段的提供者标志设置为[pfInUpdate,pfInWhere,pfInKey],而所有其他字段的标志为[pfInUpdate,pfInWhere].这并没有解决问题.

持久字段在clientdataset上定义.当我在TSQLDataSet上定义它们时,不会出现关于"未指定密钥"的错误消息.程序仍然会显示此错误消息(我之前忽略了这一点):

EDatabase error: arithmetic exception, numeric overflow or string truncation
Run Code Online (Sandbox Code Playgroud)

大字符串字段在'displaywidth'和'size'中具有正确的值.

====更多信息====

我重写了表单以使用非数据感知组件.一个查询从数据库中检索数据(使用与我在TSQLDataSet中使用的查询字符串完全相同的查询字符串); 然后将数据传输到控件.在用户按下表单上的"确定"按钮后,数据将通过执行更新或插入的另一个查询传递回数据库.由于这可以正常工作,我不知道数据感知组件的问题是什么.

====又一段信息====

我在Stack Overflow上发现了这个问题,似乎解决了类似的问题.我将查询更改为

select id, name, name, byteken, timeflag, 
cast (constext as varchar (2048)) as fconstext
from scales
where id = :p1
Run Code Online (Sandbox Code Playgroud)

并将dbMemo的数据字段设置为'fconstext'.将文本添加到dbMemo后,'applyupdates'调用现在失败,并显示以下消息

column unknown 'fconstext' …
Run Code Online (Sandbox Code Playgroud)

delphi firebird dbexpress delphi-7

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

Firebird别名

我使用Delphi和Firebird 1.5开发了一个应用程序,其中服务器与应用程序位于同一台机器上.我现在正在将应用程序部署到另一个站点,其中Firebird服务器(Superserver)在一台计算机(NT4)上运行,而客户端在另一台计算机上运行.

如果我在application(t:\db\cinema.gdb)中包含限定路径,应用程序可以连接到数据库,但我自然希望使用别名,以便相同的代码可以在我的开发机器上(使用本地服务器).

那么,有两个问题:

  1. "aliases.conf"文件应该放在哪里 - 在每台机器上连同应用程序,还是在服务器上?
  2. 别名应该是什么?cinema = t:\db\cinema.gdb,假设数据库位于映射驱动器上?cinema = 192.168.2.121:f:firebird\db\cinema.gdb,使用服务器的IP地址和服务器看到的数据库的路径?

delphi firebird aliases

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

从右到左TListView

我正在编写一个tlistview,以便从右到左显示其列(以便正确显示希伯来文本).我在表单的create方法中使用以下代码,其中'lv'是listview

 SetWindowLong (lv.Handle, GWL_EXSTYLE,
                GetWindowLong(lv.Handle, GWL_EXSTYLE)  or
                WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT);

 lv.invalidate;   
Run Code Online (Sandbox Code Playgroud)

虽然此代码使列表视图中的行显示正确,但标题行从左到右显示!列不匹配,每列的标题错误.

有没有人知道如何让标题行从右到左显示?

我正在使用Delphi 7,而不是这应该有很大的不同.

TIA,没有

delphi

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

使用 Indy 9 发送带有嵌入图片的电子邮件

我正在尝试向我的程序添加使用 Indy 9 通过 SMTP 发送 html 电子邮件的功能。如果该程序仅包含文本(文本将使用希伯来语,因此我需要从右到左显示,这意味着我使用 HTML 语句),则电子邮件将被正确发送。我的问题在于将图片嵌入到 HTML 流中。

HTML 流将使用类似的命令

<IMG SRC="cid:foo4atfoo1atbar.net" ALT="IETF logo">
Run Code Online (Sandbox Code Playgroud)

虽然 Indy 10 组件 TIdAttachmentFile 有一个 ComponentID 属性,其值必须设置为“cid”引用的值,但我找不到在 Indy 9 中设置 ComponentID 属性的位置。

目前,处理添加图片(其名称在 laPicture.text 中)的代码如下所示

  if laPicture.text <> '' then
  with TIdAttachment.Create (email.MessageParts, laPicture.text) do
   begin
    ContentDisposition:= 'inline';
    ContentType:= 'image/jpeg';
    DisplayName:= ExtractFileName (laPicture.text);
    filename:= ExtractFileName (laPicture.text);
   end;
Run Code Online (Sandbox Code Playgroud)

我在哪里定义 ContentID?

而且,虽然这是一个愚蠢的问题,但我怎么知道我拥有哪个版本的 Indy?

delphi indy delphi-7

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

dbExpress设计问题

有谁知道(或关心做出suppostion为)为什么将TSQLDataSet具有的CommandText属性(String),而TSqlQuery有一个SQL属性(字符串列表)?

考虑一下sql语句

select id, name from
table
order by name
Run Code Online (Sandbox Code Playgroud)

如果我使用TSqlQuery,那么我可以通过访问sql [1]来动态更改查询中的表名,但如果我使用的是TSqlDataset(如果我需要一个bidrectional数据集,那么我必须将数据集连接到提供者)从那里到tclientdataset),我必须按字面意思设置commandtext字符串.虽然上面的例子是微不足道的,但是当sql语句涉及更多时,它可能是一个问题.

更新:从目前为止的评论和答案来看,似乎我被误解了.我不太关心提高组件的运行时性能(当查询需要一秒钟时,一毫秒的问题是什么)但我确实关心程序员(即我)和维护程序的能力.在现实生活中,我有以下查询存储在TSqlQuery中:

select dockets.id, dockets.opendate, customers.name, statuses.statname,
dockets.totalcost, dockets.whopays, dockets.expected, dockets.urgent,
(dockets.totalcost - dockets.billed) as openbill,
(dockets.totalcost - dockets.paid) as opencost,
location.name as locname, dockets.attention,
statuses.colour, statuses.disporder, statuses.future, dockets.urgcomment
from location, statuses, dockets left join customers
on dockets.customer = customers.id
where dockets.location = location.id
and dockets.status = statuses.id
Run Code Online (Sandbox Code Playgroud)

我没有计算字符串中的字符数,但我确定有超过255个字符,因此无法将查询存储在一个简单的字符串中.在某些情况下,我想通过添加行'和statuses.id = 3'或'和customers.id = 249'来过滤显示的数据量.如果查询存储为TStrings,那么我可以在基本查询中添加虚拟行'和1 = 1',然后根据需要更新此行.但查询是一个长字符串,我不能轻易访问它的结尾.

我目前正在做的事情(代替更好的解决方案)是创建另一个TSqlDataSet,并将其commandtext设置为默认的TSqlDataSet的commandtext,同时附加额外条件.

delphi dbexpress

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