当我使用DefaultButton(编辑登录+ Tab,编辑密码+ Enter)输入登录密码时,该X.Password属性仍未更改.那么当我使用DefaultButton时如何提交密码?
member X.Password
with get() = password
and set value =
password <- value
X.OnPropertyChanged "Password"
member X.LoginCommand =
new RelayCommand ((fun canExecute -> true), (fun action ->
X.SelectedAccount <-
match
X.Accounts
|> Seq.filter (fun acc ->
acc.Name = login &&
acc.Password = password) with
| s when Seq.isEmpty s ->
X.ConvertButtonEnabled <- false
ignore <| MessageBox.Show(sprintf
"User %s doesn't exist or password incorrect password" X.Login)
{Name=""; Role=""; Password=""; ExpenseLineItems = []}
| s …Run Code Online (Sandbox Code Playgroud) 我已经在stackoverflow上找到了一些东西,但它并没有真正解决我的疑问.我知道创建对象的正确方法是在创建之后将代码包围在try-finally块中.但是关于:
procedure TForm3.FormCreate(Sender: TObject);
begin
a := TClassX.Create;
end;
Run Code Online (Sandbox Code Playgroud)
然后打电话:
procedure TForm3.FormDestroy(Sender: TObject);
begin
a.Free;
end;
Run Code Online (Sandbox Code Playgroud)
课堂a: TClassX;内的公开声明在哪里TForm3.我应该为表单创建构造函数和析构函数,还是可以使用上面的代码?安全吗?
DROP TABLE IF EXISTS tmp1_variables;
CREATE TEMPORARY TABLE tmp1_variables AS (
SELECT
'2016-10-29'::date as start_date,
'2017-01-28'::date as end_date2,
dateadd(day,-13,getdate())::date as end_date);
SELECT cobrand_id, sum(calc) AS a, sum(count) AS b FROM jwn_calc s, tmp1_variables
where s.optimized_transaction_date > start_date
AND s.optimized_transaction_date <= min(end_date,end_date2)
Run Code Online (Sandbox Code Playgroud)
我特别在min(end_date,end_date2),出现错误:
[42883] 错误:函数 min(date, date) 不存在 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
我想从Delphi 2007运行一个简单的SQL.
我用AdoQuery.我的表有一列id,数据类型是int(自动增量).
我的问题是如果我执行
select * from comlist
Run Code Online (Sandbox Code Playgroud)
它没有问题,它运行.但是,如果我在SQL上定义一个字段就像
select compname from comlist
Run Code Online (Sandbox Code Playgroud)
德尔福抱怨道
ado:找不到字段'id'
该Compname列存在于表中.
我的桌子上有以下字段:
id int
creationdate datetime
compid nvarcahr(50)
complocation nvarchar(50)
serial nvarchar(50)
compname nvarchar(50)
Run Code Online (Sandbox Code Playgroud)
我有这个代码的错误:
ado.Close;
ado.SQL.Clear;
ado.SQL.Add('SELECT compname FROM comlist');
ado.Open;
Run Code Online (Sandbox Code Playgroud)
我对此代码没有错误:
ado.Close;
ado.SQL.Clear;
ado.SQL.Add('SELECT * FROM comlist');
ado.Open;
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?
我正在使用Delphi 5命令行编译器来进行构建.构建不会报告任何错误,但它也不会生成EXE文件.
我可以确认以下内容:
编辑虽然我在Delphi 5中遇到过这种情况,但并不是特定于该版本.在德尔福的Bug列表证实至少D4-D6的问题.
我有2段代码:
with ADOTemp do
begin
SQL.Clear;
SQL.Add('INSERT INTO documents');
SQL.Add('(document_date,fk_id_status,money_direction,');
SQL.Add('paid,addition,saving,fk_id_base,fk_id_user)');
SQL.Add('VALUES ');
SQL.Add('(CONVERT(DATE,GETDATE(),103),:pfk_id_status,:pmoney_direction,');
SQL.Add('0,0,0,'+IntToStr(p_id_base)+',:pfk_id_user)');
Parameters.ParamByName('pfk_id_status').Value := p_id_status;
Parameters.ParamByName('pmoney_direction').Value := p_money_direction;
// Parameters.ParamByName('p').Value := p_id_base;
Parameters.ParamByName('pfk_id_user').Value := fMain.ApplicationVariablers.user_id;
ExecSQL;
end;
Run Code Online (Sandbox Code Playgroud)
with ADOTemp do
begin
SQL.Clear;
SQL.Add('INSERT INTO documents');
SQL.Add('(document_date,fk_id_status,money_direction,');
SQL.Add('paid,addition,saving,fk_id_base,fk_id_user)');
SQL.Add('VALUES ');
SQL.Add('(CONVERT(DATE,GETDATE(),103),:pfk_id_status,:pmoney_direction,');
SQL.Add('0,0,0,:p,:pfk_id_user)');
Parameters.ParamByName('pfk_id_status').Value := p_id_status;
Parameters.ParamByName('pmoney_direction').Value := p_money_direction;
Parameters.ParamByName('p').Value := p_id_base;
Parameters.ParamByName('pfk_id_user').Value := fMain.ApplicationVariablers.user_id;
ExecSQL;
end;
Run Code Online (Sandbox Code Playgroud)
图像错误,第1917行
现在有一个像这样的多线程方案:
//global variables
var
Form1: TForm1;
ControlFile: TextFile;
MaxThreads, iThreads: integer;
MyCritical: TCriticalSection;
Run Code Online (Sandbox Code Playgroud)
ControlFile由执行ReadLn的线程访问,并使用获得的行执行操作:
procedure TForm1.Button2Click(Sender: TObject);
var
HostLine: AnsiString;
FileHandle: integer;
begin
MyCritical:= TCriticalSection.Create;
MaxThreads:= 100;
iThreads:= 0;
while not(eof(ControlFile)) and (iThreads < MaxThreads) do
begin
inc(iThreads);
ReadLn(ControlFile, HostLine);
MyThread.Create(HostLine);
end;
end;
Run Code Online (Sandbox Code Playgroud)
这个街区是第一个疑问.我创建了100个线程,每个创建的线程接收到文本文件的当前行.但问题是在threads.onterminate上,我执行:
procedure MyThread.MainControl(Sender: TObject);
var
HostLine: string;
begin
try
MyCritical.Acquire;
dec(iThreads);
while not(eof(ControlFile)) and (iThreads < MaxThreads) do
begin
inc(iThreads);
ReadLn(ControlFile, HostLine);
MyThread.Create(HostLine);
end;
finally
MyCritical.Release;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我们的想法是继续创建新线程,直到文本文件完成.但是如果一个线程终止并执行此过程,那么在第一个完成之前,会发生什么?来自button2click的主线程将访问该文件,以及线程的过程.这看起来很奇怪.而关键部分应该是全局的还是本地的线程?这个程序MainControl在文件结束之前打开新线程应该是全局的还是线程本地的?