gpt4 book ai didi

mysql - 如何通过 TDBXReader 获取数据库大小?

转载 作者:行者123 更新时间:2023-11-29 00:06:35 24 4
gpt4 key购买 nike

我正在尝试通过 TDBXReader 获取我的数据库的大小。我的命令 SQL 返回两行,我的数据库大小和所有数据库大小的总和。

我正在尝试使用 Reader.Value[0] 来获取数据库总和的值并得到错误 TDBXTypes.BCD 值类型无法作为 TDBXTypes.Doubletype 访问。

如果我使用 Reader.Value[1] 得到 'Invalid Ordinal = 1'

函数:

function ChangeBD() : double;
var
Con : TDBXConnection;
Cmd : TDBXCommand;
Reader : TDBXReader;
begin
Result:= 0;
Con := TDBXConnectionFactory.GetConnectionFactory.GetConnection('mydb', 'root', 'root');
Cmd := Con.CreateCommand;
Cmd.Text := 'SELECT Sum(data_length + index_length) / 1024 / 1024 "BDsize" FROM information_schema.tables WHERE table_schema = '+quotedstr('mydb');

Reader := Cmd.ExecuteQuery;

if Reader.Next then
begin
Result:= Reader.Value[0].GetDouble;
end
else

Con.Free;
Cmd.Free;
Reader.Free;

end;

最佳答案

  • 当您只放置一个数据字段 ("BDsize") 以供处置时,您如何期望获得第二个值 (Reader.Value[1])?
  • 使用GetAsDouble
  • 做一个测试if Reader.Value[3].AsString >'' 你不能将一个empty值转换成double
  • 使用 if Reader.Next then,您只会从许多行中得到 1 行!使用 while 代替

通过以下 SELECT,您将获得 4 列

  • 表名,[0]
  • 数据长度,[1]
  • index_length , [2]
  • 总大小 [3]

var
sum : double;

[...]

Cmd := Con.CreateCommand;
Cmd.Text := 'SELECT table_name, '+
'round( data_length / ( 1024 *1024 ) , 2 ) data_length, '+
'round( index_length / ( 1024 *1024 ) , 2 ) index_length, '+
'round( round( data_length + index_length ) / ( 1024 *1024 ) , 2 ) total_size '+
'FROM information_schema.TABLES '+
'WHERE table_schema = ''mydb'' ';

Reader := Cmd.ExecuteQuery;

获取双倍

function ChangeBD() : double;
[...]
while Reader.Next do
begin
if Reader.Value[3].AsString > ''
then sum := sum + Reader.Value[3].GetAsDouble;
end
Result:= sum;

或者自己求和;

function ChangeBD() : double;
[...]
while Reader.Next do
begin
if Reader.Value[3].AsString > ''
then sum := sum + StrToFloat(Reader.Value[3].AsString) ;
end
Result:= sum;

关于mysql - 如何通过 TDBXReader 获取数据库大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27218412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com