小编use*_*752的帖子

MySQL:DEFINER 对过程和函数有什么影响?

我使用 SQLyog 在我正在开发的远程 MySQL 数据库中编写过程和函数。数据库只有一个用户名/密码。它是通过我用 Delphi 编写的前端可执行应用程序访问的,它被几十个不同的人使用,所有人都使用相同的用户名。

例如,当我使用 SQLYog 编写一个过程时,

CREATE PROCEDURE age_frequency_count(IN bin_size INT)
Run Code Online (Sandbox Code Playgroud)

无论我喜欢与否,结果过程都会将定义器放入,从而导致

CREATE DEFINER=<the_user_name>@<my_IP_address> PROCEDURE age_frequency_count(IN bin_size INT)
Run Code Online (Sandbox Code Playgroud)

(我认为这是由 MySQL 完成的,而不是由 SQLYog DBMS 完成的。)

通过阅读文档和 SO 上的帖子,我对如何使用定义器说明执行或更改程序所需的权限以及允许程序执行的操作有一个粗略但相当混乱的想法,但我希望得到一些澄清。

如果我的 IP 地址在定义器中,该过程是否仍然可以被其他将从不同 IP 地址登录的人执行(尽管使用相同的用户名)?

有人可以澄清定义者在做什么吗?即来自我的 IP 地址的连接能做什么而来自其他 IP 地址的连接不能?

mysql stored-procedures

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

SQLite语法在临时表上创建索引?

创建表的语法是

CREATE [temp] TABLE TableName(...)
Run Code Online (Sandbox Code Playgroud)

因此可以使用以下命令在临时数据库中创建表

CREATE temp TABLE MyTable(...)
Run Code Online (Sandbox Code Playgroud)

要么

 CREATE TABLE temp.MyTable(...)
Run Code Online (Sandbox Code Playgroud)

而完全解析该表的方式将是

temp.Mytable
Run Code Online (Sandbox Code Playgroud)

这将是与main.MyTable不同的表。

但是,创建索引的语法仅仅是

CREATE INDEX IndexName ON TableName (FieldName )
Run Code Online (Sandbox Code Playgroud)

不允许表名带有数据库名

所以没关系

CREATE INDEX MyIndex ON MyTable (MyField)
Run Code Online (Sandbox Code Playgroud)

但这不是

CREATE INDEX MyIndex ON Temp.MyTable (MyField)
Run Code Online (Sandbox Code Playgroud)

然后如何在临时表上创建索引(特别是如果主数据库中可能有同名表)?

sqlite indexing

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

Delphi Tstringlist,获取字符串作为带引号、逗号分隔的字符串?

我有一个 Tstringlist,其中包含数据库表中使用的键列表。我想要一种简单的方法来生成一个包含所有键的字符串,每个键用逗号分隔并用单引号引起来。这样它就可以在 SQL 'IN' 语句中使用,例如WHERE FieldX IN ('One','Two','Three')

我尝试过使用 quotechar 但在读取逗号文本时它会被忽略。例如下面的代码

procedure junk;
var
  SL : Tstringlist;
  s : string;
begin
 SL := Tstringlist.Create;
 SL.Delimiter :=','; //comma delimiter
 SL.QuoteChar := ''''; //single quote around strings
 SL.Add('One');
 SL.Add('Two');
 SL.Add('Three');
 try
   s :=  SL.commatext;
   showmessage(s);
 finally
   SL.Free;
 end; //finally
end; //junk
Run Code Online (Sandbox Code Playgroud)

显示消息一、二、三 - 不带任何引号。

我知道我可以从长远来看,就像

procedure junk;
var
  SL : Tstringlist;
  s : string;
  i : integer;
begin
 SL := Tstringlist.Create;
 SL.Delimiter :=','; //comma delimiter
 SL.Add('One');
 SL.Add('Two');
 SL.Add('Three'); …
Run Code Online (Sandbox Code Playgroud)

csv delphi tstringlist

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

在Delphi中使用TIdHTTP提交表单并检索数据(不常见)

存在一个网页(www.someurl.co.uk),其中除其他外,其内部还具有包含输入字段和图像的表单。

在浏览器中,当用户在输入字段中输入字符串并单击图像时,将提交表单并生成另一个页面(www.someurl.co.uk/results.php),该页面除其他外还包含一个表,该表包含一些结果。

我需要Delphi在第一页的表单中填写字符串,提交表单,然后从结果页上的表格中获取几个单元格的内容。

我已经使用TIdHTTP组件使用以下代码将数据发布到表单,但是之后在备注框中看到的文本只是初始页面(www.someurl.co.uk)的html。

请有人用正确的代码帮助我,以从结果页面获取值BlaBla_A,BlaBla_C,BlaBla_C和BlaBla_D-并了解哪个是哪个?

(尽管我对Delphi感到满意,但是我对网页和HTML并不了解很多,这是我第一次使用Indy组件)

这是我目前正在使用的代码

procedure TForm1.Button2Click(Sender: TObject);
var
  Response: TStringStream;
  Params: TStringList;
begin
Params := TStringList.Create;
try
  Params.Add('thedata=' + 'MyString');
  Response := TStringStream.Create('');
  try
     IdHTTP1.Post('www.someurl.co.uk', Params, Response);
     memo1.Text := Response.DataString;
  except
   on E: Exception do
   begin
    showmessage('Error: ' + E.Message);
   end;
  end;

finally
  Params.Free;
  Response.Free;
end;

end;
Run Code Online (Sandbox Code Playgroud)

数据输入/提交页面(www.someurl.co.uk)的重要部分如下所示

</div>
<h3>Enter the data you want to look for then click FIND</h3>
<form action="results.php" method="post" name="form1" target="_parent" 
      id="form1" 
      onsubmit="if (document.getElementById('text').value==''  
                   || document.getElementById('text').value=='ENTER DATA') 
                   {alert ('Please enter data first then …
Run Code Online (Sandbox Code Playgroud)

html delphi indy

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

嵌套异常的正确方法是什么? - 使用Delphi

假设我有三个(或更多)程序,其中一些程序互相调用,如下所示,其中任何一个程序都可能失败.

如果其中任何一个失败,我希望'main'程序立即记录失败并终止程序.

在Delphi中使用哪种正确的语法将异常"传回"到每个先前的过程调用?

如果有人可以帮助我获取主程序的Try/except块以确定哪个位失败,那就更好了!

三个程序和主程序的示例伪代码可能如下所示.

(我想我理解这个原理,与'raise'有关,但是想要一些实际语法和我应该使用的代码的帮助)

//////////////////////////////////////
Procedure DoProcA
begin
try
   begin
   {stuff};  //stuff that might fall
   end;
except
 on E : Exception do 
     begin 
     LogError ('error in A'); 
     end  //on E
end;//try

 //////////////////////////////////////

Procedure DoProcB
begin
try
  begin 
  Do ProcC;  //another proc that might fail
  {other stuff}
  end;
except
 on E : Exception do
     begin
     LogError ('error in B');
     end  //on E
end;//try

 //////////////////////////////////////

Procedure DoProcC
begin
try
  begin 
  {Do stuff}  //even more stuf fthat might fail
  end;
except …
Run Code Online (Sandbox Code Playgroud)

delphi exception-handling

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

Indy TIdIcmpClient - 如何检测超时?

(使用Delphi 2009)我正在尝试使用Indy TidIcmpClient编写一个简单的网络连接监视器.想法是ping一个地址,然后在附加的TidIcmpClient.OnReply处理程序内测试返回了多少数据.如果回复包含> 0字节,那么我知道连接成功,但如果TidIcmpClient超时或回复包含0字节,我将假设链接已关闭

由于没有'OnTimeout'事件,我很难理解TidIcmpClient的逻辑.

两个子问题......

无论如何都要调用TidIcmpClient.OnReply,或者(a)收到数据时还是(b)达到超时时(以先到者为准)?

如何区分零字节答复,因为超时时间内的实际应答超时恰好包含零字节(或者不会发生这种情况)?

换句话说,这种代码是好还是我需要做其他事情来判断它是否超时

procedure TForm1.IdIcmpClient1Reply(ASender: TComponent; const AReplyStatus: TReplyStatus);
begin
if IdIcmpClient1.ReplyStatus.BytesReceived = 0 then
  //we must have timed out, link is down
else
  //got some data, connection is up
end;

procedure DoPing;
begin
IdIcmpClient1.ReceiveTimeout := 200;
IdIcmpClient1.Host := '8.8.8.8';
IdIcmpClient1.Ping;
end;
Run Code Online (Sandbox Code Playgroud)

delphi ping indy

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