小编use*_*073的帖子

Delphi - 使用不同的TTable和TQuery作为一个对象

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 /间接的方法.我并不过分关注快速致盲.请记住 - 更简单更好,我不是一个专业的程序员....

任何想法都赞赏.感谢大家.

delphi tquery indirection delphi-2010

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

Delphi类def导致EStackOverflow

我有一个使用类的应用程序,一个名为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 destructor class

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

如何释放动态创建的帧?

在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

delphi tframe

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

Oracle - 删除括号内的子字符串

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 语句?请注意,可能有多组括号(不一定是嵌套的),因此我需要它来删除每个出现的括号。

regex oracle

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

Delphi - SysUtils.Trim 不删除最后一个空格(?)字符

德尔福里约。我用 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

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

Delphi - 如何排除/关闭集合中的所有值?

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?

谢谢

delphi set

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

Delphi - 从字符串中删除特定的十六进制值

德尔福东京 - 我有一个文本文件...(特别是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 hex

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

在自定义类中使用 TStringList 时的 Delphi AV

在 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 class

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

标签 统计

delphi ×7

class ×2

delphi-2010 ×1

destructor ×1

hex ×1

indirection ×1

oracle ×1

regex ×1

set ×1

tframe ×1

tquery ×1