有没有简单的方法从Microsoft Access(2007)检索表创建DDL或我是否必须使用VBA自己编写代码来读取表结构?
我有大约30个表,我们正在移植到Oracle,如果我们可以从Access定义创建表,它将使生活更轻松.
我在Delphi 2006中使用运算符重载记录.(请不要告诉我不要回答这个问题.)
我有两个记录类型,隐式运算符重载.它们都只是在模块的实现中,而不是通过接口公开.
我的问题是,既然它们是相互依赖的,我不知道如何将第二种类型转发给编译器.我知道如何使用函数,过程和类来执行此操作,但不知道如何使用记录.
这是我想要做的简化示例:
implementation
type
TMyRec1 = record
Field1 : Integer;
class operator Implicit(a: TMyRec2): TMyRec1; // <---- Undeclared Identifier here.
end;
TMyRec2 = record
Field2: Integer;
class operator Implicit(a: TMyRec1): TMyRec2;
end;
class operator TMyRec1.Implicit(a:TMyRec2): TMyRec1;
begin
Result.Field1 := a.Field2;
end;
class operator TMyRec2.Implicit(a:TMyRec2): TMyRec2;
begin
Result.Field2 := a.Field1;
end;
Run Code Online (Sandbox Code Playgroud) 我有一个链接到Oracle 12.1数据库的SQL Server 12.0数据库.
我想在SQL Server数据库中创建一个视图,该视图从按日期过滤的Oracle表中返回数据.Oracle表在日期列上有一个索引.
成功运行的查询是:
select * from ORADB..SCHEMA.MYTABLE where MYDATE >= '20140701';
Run Code Online (Sandbox Code Playgroud)
然而,这运行得非常缓慢.我假设这是因为比较发生在SQL Server中,所以每行都被返回.
如果我走:
DECLARE @earliest date = '20140701';
select * from ORADB..SCHEMA.MYTABLE where MYDATE >= @earliest;
Run Code Online (Sandbox Code Playgroud)
然后它运行得很快,大概是因为条件被传递给Oracle所以正在使用表上的Oracle索引.
我的问题是我想创建一个视图.我找不到使用第二版代码创建视图的方法.如果我只是这样做:
create myview as select * from ORADB..SCHEMA.MYTABLE where MYDATE >= '20140701';
Run Code Online (Sandbox Code Playgroud)
然后它运行缓慢.
是否有SQL Server将传递给Oracle的日期文字的另一种格式,还是有另一种解决方案?我还想知道它是否与创建Oracle链接时使用的参数有关.供参考,它们是:
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'ORADB', @srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'DPDB'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ORADB',@useself=N'False',@locallogin=NULL,@rmtuser=N'MYUSER',@rmtpassword='#######'
GO
EXEC master.dbo.sp_serveroption @server=N'ORADB', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'ORADB', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'ORADB', @optname=N'dist', …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现一个简单的文本文件加密技术,我正在使用以下代码来执行此操作.代码不是我写的,我只是用Google搜索并得到它.加密技术似乎非常简单,简洁且易于实现.我看到它只有一个功能可以动态地进行加密和解密.只需传递密钥即可.但是,我只是想知道,我是否可以检查用户是否传递了密钥是否正确.目前,它只是根据传递的密钥加密/解密文本文件.但是没有机制来检查我们是否使用正确的密钥进行解密.无论我们传递什么密钥,它都会被解密,但它不会被读取.知道如何解决这个问题..?
procedure TEnDeCrypt.EnDecryptFile(pathin, pathout: string; Chave: Word);
var
InMS, OutMS: TMemoryStream;
cnt: Integer;
C: byte;
begin
InMS := TMemoryStream.Create;
OutMS := TMemoryStream.Create;
try
InMS.LoadFromFile(pathin);
InMS.Position := 0;
for cnt := 0 to InMS.Size - 1 DO
begin
InMS.Read(C, 1);
C := (C xor not (ord(chave shr cnt)));
OutMS.Write(C, 1);
end;
OutMS.SaveToFile(pathout);
finally
InMS.Free;
OutMS.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud) 我有几个xml文件,其名称存储在另一个xml文件中.
我想使用xsl来生成xml文件组合的摘要.我记得有一种方法可以使用msxml扩展(我使用的是msxml).
我知道我可以使用每个文件的内容,select="document(filename)"但我不确定如何将所有这些文档合并为一个.
21 - 08年10月我应该提到,我想要做的合并XML进一步处理,所以它是不够的只是输出它的变换,我需要将其存储在一个变量设置节点.
在Delphi 2007中,我使用一个类来实现第二类支持的接口之一.这很有效.德尔福帮助指出:
默认情况下,使用implements关键字委托所有接口方法.但是,您可以在类中使用方法解析子句或声明方法来实现某些接口方法来覆盖此默认行为.
但是,当我在我的第二个类中声明一个具有其中一个接口方法的匹配签名的方法时,它不会被调用.
我想知道这是不是因为我在创建它时通过另一个界面访问该类.
下面是一个演示我的问题的测试程序:
program Project1;
{$APPTYPE CONSOLE}
type
IInterface1 = interface
['{15400E71-A39B-4503-BE58-B6D19409CF90}']
procedure AProc;
end;
IInterface2 = interface
['{1E41CDBF-3C80-4E3E-8F27-CB18718E8FA3}']
end;
TDelegate = class(TObject)
protected
procedure AProc;
end;
TMyClass = class(TInterfacedObject, IInterface1, IInterface2)
strict private
FDelegate: TDelegate;
property Delegate: TDelegate read FDelegate implements IInterface1;
public
constructor Create;
destructor Destroy; override;
procedure AProc;
end;
procedure TDelegate.AProc;
begin
writeln('TClassDelegate.AProc');
end;
constructor TMyClass.Create;
begin
inherited;
FDelegate := TDelegate.Create;
end;
destructor TMyClass.Destroy;
begin
FDelegate.Free;
inherited;
end;
procedure TMyClass.AProc;
begin
writeln('TMyClass.AProc');
end;
var …Run Code Online (Sandbox Code Playgroud) 我在Oracle中有两个表,作业和参考.
我想在两个表中插入一条新记录,并从序列生成一个密钥.就像是:
insert into (
select j.jobid, j.fileid, j.jobname, r.reffileid
from job j
inner join reference r on j.jobid=r.jobid)
values (jobidsequence.nextval, 4660, 'name', 4391);
Run Code Online (Sandbox Code Playgroud)
当然,这会导致:
ORA-01776: cannot modify more than one base table through a join view
Run Code Online (Sandbox Code Playgroud)
有没有办法在不使用PL/SQL的情况下执行此操作?我非常喜欢只使用SQL来做到这一点.
delphi ×3
sql ×3
oracle ×2
delphi-2006 ×1
delphi-2007 ×1
delphi-2010 ×1
delphi-7 ×1
ms-access ×1
msxml ×1
sql-server ×1
xml ×1
xslt ×1