Delphi 2010,Win7 - 64
我正在编写一个涉及连接到不同数据库的应用程序.我使用两个不同的供应商进行数据库访问 我使用DA-Soft的AnyDAC,它允许我连接到"工业"数据库,Oracle,SQL Server等,我使用ComponentAce的ABS数据库,这是一个基于PC的小型SQL数据库.(顺便说一下,我强烈推荐).我的问题是我需要编写一系列通用例程,这些例程可能会违反供应商组件.
这两个组件都有TTable和TQuery组件.我需要编写一组例程,其中一些是基于TTable的,有些是基于TQuery的.这些例程可能违反供应商组件.
作为一个例子,我需要能够遍历TTable中的所有行.我第一次运行例程时,需要使用DA-Soft的TTable.下次运行它时,我需要它来运行Component Ace的TTable.TQuery也存在相同的情况.
我需要一层抽象 - 至少我认为我做了.我不想多次编写每个例程.建议提供这层abstration /间接的方法.我并不过分关注快速致盲.请记住 - 更简单更好,我不是一个专业的程序员....
任何想法都赞赏.感谢大家.
我有一个使用类的应用程序,一个名为TBaseDB的基类,并且会有许多TBaseDB的后代,所有DIRECT兄弟,现在只有一个已经启动,TOraDB,但稍后会添加TSQLDB等.
我的应用程序使用该类的一个实例,它是一个全局实例,即一个名为PROJ的全局变量.我对构造函数,析构函数和全局变量的理解存在一个问题,它导致EStackOverflow在应用程序的其他位置.如果我注释掉我的PROJ.CREATE,EStackOverflow就会消失.
我的构造函数只能设置变量,它们不会动态创建链表,数组或其他内存密集型对象.
以下是一些代码段.
// global var definition
// Specifically of BASE class, so I can call any child class without knowing which child class it is...
PROJ : TBaseDB;
Run Code Online (Sandbox Code Playgroud)
我的例程导致我的错误......
procedure TForm1.ShowBug;
begin
// We have clicked on 'Create New Oracle Project
// Now create our PROJ object.
// This is defined globally, but MAY have been used before
// so 'zero' it out
FreeAndNil(PROJ);
// Note that the create is on the CHILD class, not the BASE class …Run Code Online (Sandbox Code Playgroud) 在Delphi 2010中......我有一个表格.表单的左侧是Treeview.它显示了一个多级层次结构.假设有5种不同类型的数据,类型A,B,C,D和E.在表单的右侧,我有一个面板,我将在其中创建一个TFrame.如果我在我的Treeview中单击"A"类型的数据元素,我会在表单的右侧创建一个显示tFrame"A"的TFrame.基本上我正在显示我的TreeView的各种层次结构的详细信息.5种类型的数据中的每一种都使用不同类型的TFrame.虽然我可以动态创建TFrames,但我很难知道WHERE以及如何删除/释放TFrames?
我是否创建了一个显示前一个TFrame的TYPE的变量?删除TFrame的正确方法是什么?是TFrame.Free吗?请记住,我可能需要创建框架A,自由框架A,创建框架B,自由框架B,创建框架A(再次)等等...
我试过了......
if Assigned (TFrameA), then TFrameA.free;
Run Code Online (Sandbox Code Playgroud)
虽然这似乎有效,但这会导致奇怪的行为(导致按钮消失).这也意味着我需要将所有5种类型的TFrame定义为全局变量.
任何和所有的想法都赞赏.
谢谢,
GS
Oracle 12cR1 - 我正在编写一个基于 Web 的应用程序。我需要处理一个字符串并删除左/右括号以及其中的所有文本。例如,如果我的输入是
This is a (bad) sample, (my) friend
Run Code Online (Sandbox Code Playgroud)
输出应该是
This is a sample, friend
Run Code Online (Sandbox Code Playgroud)
我有这个在 Javascript 中工作。我需要它在 javascript 和 Oracle SQL 中都能工作。JavaScript 中的代码是
var s2 = s1.replace(/\([^()]*\)/g, '');
Run Code Online (Sandbox Code Playgroud)
当我尝试将其转换为 Oracle SQL 时,没有任何反应,也就是说我的输出与我的输入完全相同......
select regexp_replace('This is a (bad) sample','/\([^()]*\)/g', '') from dual;
Run Code Online (Sandbox Code Playgroud)
在搜索中,有人发布了不同的正则表达式,我尝试了。同样,输出没有变化。
select regexp_replace('This is a (bad) sample','(?<=\()[\d.]+(?=\))', '') from dual;
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想要的是一个正则表达式,它还可以处理嵌套括号,删除整个短语。
This is a ((really) bad) example
Run Code Online (Sandbox Code Playgroud)
应该返回
This is a example
Run Code Online (Sandbox Code Playgroud)
对于嵌套括号,JavaScript 表达式匹配最里面的一组括号,因此我只需运行代码两次即可。
总而言之,什么是接受字符串并删除(理想情况下嵌套)括号以及括号内所有文本的 Oracle SQL 语句?请注意,可能有多组括号(不一定是嵌套的),因此我需要它来删除每个出现的括号。
德尔福里约。我用 Delphi 构建了一个 Excel 插件(也使用 AddIn Express)。我遍历一列以读取单元格值。在读取单元格值后,我执行了 TRIM 函数。TRIM 不会删除最后一个空格。代码片段...
acctName := Trim(UpperCase(Acctname));
Run Code Online (Sandbox Code Playgroud)
在代码之前,AcctName 是“ABC Holdings”。在 TRIM 功能之后也是一样的。Excel 似乎在那里添加了某种类型的其他字符。(新行??回车??)摆脱这种情况的最佳方法是什么?有没有办法让调试器向我显示这个变量的十六进制值。我试过 INSPECT 和 EVALUATE 窗口。他们都只显示文本。请注意,我必须小心删除非文本字符,并且一些公司名称有破折号、逗号、撇号等。
**附加信息 - 根据 Andreas 的建议,我添加了以下内容...
ShowMessage(IntToHex(Ord(Acctname[Acctname.Length])));
Run Code Online (Sandbox Code Playgroud)
这与'00A0'一起返回。所以我想我可以做一个简单的 StringReplace ......所以我在 Andreas 代码之前添加了这个......
acctName := StringReplace(acctName, #13, '', [rfReplaceAll]);
acctName := StringReplace(acctName, #10, '', [rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)
然而,似乎什么都没有改变。ShowMessage 仍然显示“00A0”作为最后一个字符。为什么 StringReplace 不删除它?
Delphi XE6 - 我有一套.我想要一个简单的方法来关闭所有元素.即,而不是排除,像ExcludeALL之类的东西.我试图遍历所有元素,但我收到一个错误.
码
type
TSearchParametersType =
(smDUNSAvailable = 1,
smDUNSHit,
smDUNSMiss,
smDUNSAbsent,
smRegistryAvailable,
smRegistryHit,
smRegistryAbsent,
smRegistryMiss,
smNameAvailable,
smNameHitExact,
smNameHitWords,
smNameMiss
);
// Now create a set type, where we can have a variable that has all the values of TSearchParametersType
type
TSearchParametersSet = set of TSearchParametersType;
...
var
i : Integer;
sSearchStatus: TSearchParametersSet;
begin
for i := smDUNSAvailable to smNameMiss do
Exclude(sSearchStatus, i);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是"不兼容的类型:'整数'和TSearchParametersType."
除了MANUALLY通过每个元素之外,有没有一种简单的方法可以排除ALL?
谢谢
德尔福东京 - 我有一个文本文件...(特别是CSV文件).我正在使用TextFile操作逐行读取文件...文件的前三个字节有一些我不感兴趣的标题数据.虽然我认为这将是所有文件中的情况,我想验证在我删除它之前.简而言之,我想读取该行,将前三个字节与三个十六进制值进行比较,如果匹配,则删除3个字节.
当我在十六进制编辑器中查看文件时,我明白了
EF BB BF ...
Run Code Online (Sandbox Code Playgroud)
无论出于何种原因,我的比较都不起作用.这是一个代码片段.
var
LeadingBadBytes: String;
begin
// Open file, and read first line into variable TriggerHeader
...
LeadingBadBytes := '$EFBBBF';
if AnsiPos(LeadingBadBytes, TriggerHeader) = 1 then
delete(TriggerHeader, 1, 3);
Run Code Online (Sandbox Code Playgroud)
DELETE命令本身工作正常,但我无法使AnsiPos工作.我应该做些什么呢?
在 Delphi Rio 中,我创建了一个类,其目的是从数据库中读取记录。这条记录纯粹是只读的,看完之后,我需要衍生出一些额外的属性。我的问题与我想在我的类定义中使用的 Stringlist 有关。我有一个名为 fVENDORS_TO_COLORCODE 的私有类成员。这是一个逗号分隔的字符串。我想要创建一个 TStringlist 属性。我正在使用 TStringList.CommaToText 将我的值加载到 Tstringlist 中。我在创建构造函数中执行此操作。我遇到的问题是,虽然 StringList 在构造函数中有效,但它在构造函数之外为零,我不知道我做错了什么。这是代码的相关部分。
type
TProfileDef = class(TObject)
private
fNAME: String;
fVENDORS_TO_COLORCODE: String; // incoming comma separated string. Example string: Microsoft,IBM
fVENDORS_TO_COLORCODE_SL : TStringList;
..
public
constructor Create(ProfileName: String);
destructor Destroy; override;
published
property NAME: String read fNAME;
property VENDORS_TO_COLORCODE: String read fVENDORS_TO_COLORCODE;
property VENDORS_TO_COLORCODE_SL : TStringList read fVENDORS_TO_COLORCODE_SL;
..
end;
implementation
destructor TProfileDef.Destroy;
begin
inherited;
fVENDORS_TO_COLORCODE_SL.Free;
end;
constructor TProfileDef.Create(ProfileName: String);
var
fVENDORS_SL: TStringList;
fVENDORS_TO_COLORCODE_SL: TStringList;
TempVendorList : …Run Code Online (Sandbox Code Playgroud) delphi ×7
class ×2
delphi-2010 ×1
destructor ×1
hex ×1
indirection ×1
oracle ×1
regex ×1
set ×1
tframe ×1
tquery ×1