YashinaS / statisticswebirbis

0 stars 3 forks source link

Запись данных #39

Closed YashinaS closed 6 years ago

YashinaS commented 6 years ago

Если проверять каждую строку из файла с имеющимися в базе , то на обработку одной строки уходит 6с. Если обрабатывать каждую строку таким способом уйдет 6 666 часов.

faridlesosibirsk commented 6 years ago

прочитал

faridlesosibirsk commented 6 years ago

сделать так: 1) создать подключение к БД; 2) выполнить множество запросов в цикле; 3) закрыть подключение к БД. SQL1 ищет несовпадение, если находит, то записывает в базу. 2: ADOQuery.Connection := ADOConnection1; ADOQuery.Close; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(SQL1); ADOQuery.ExecSQL; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(SQL2); ADOQuery.ExecSQL; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(SQL3); ADOQuery.ExecSQL; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(SQL4); ADOQuery.ExecSQL; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(SQL5); ADOQuery.Open; ADOQuery.Active := true;

или

ADOQuery.Close; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(SQL1); ADOQuery.SQL.Add(SQL2); ADOQuery.SQL.Add(SQL3); ADOQuery.SQL.Add(SQL4); ADOQuery.SQL.Add(SQL5); ADOQuery.SQL.Add(SQL6); ADOQuery.SQL.Add(SQL7); ADOQuery.SQL.Add(SQL8); ADOQuery.SQL.Add(SQL9); ADOQuery.SQL.Add(SQL10); ADOQuery.Open; ADOQuery.Active := true;

faridlesosibirsk commented 6 years ago

переписать в один SQL запрос. Заменить:

ADOQuery1.close;
ADOQuery1.sql.text := 'select count(1) from test where (ip= "' + a1 +
  '" ) and (date= "' + a2 + '") and (url= "' + a3 + '") and (code= "' + a4 +
  '") and (size= "' + a5 + '")';
ADOQuery1.open;
if ADOQuery1.fields[0].asString = '0' then
// â count(ip) ïîëó÷èëè 0, çíà÷èò ñîâïàäåíèé íåò
begin
  ADOQuery1.sql.text := 'insert test (ip,date,url,code,size) values ("' + a1
    + '", "' + a2 + '","' + a3 + '","' + a4 + '","' + a5 + '")';
  ADOQuery1.ExecSQL;

end

на код

ADOQuery1.sql.text := 'insert test (ip,date,url,code,size) values ("' + a1

YashinaS commented 6 years ago

Ошибку выдает если заменить код

faridlesosibirsk commented 6 years ago

какую ? подробно(всю ошибку - копировать, вставить)

faridlesosibirsk commented 6 years ago

запушить с ошибкой, и создать вопрос - исправить ошибку.

YashinaS commented 6 years ago

[MySQLHODBC 5.3(w) Driver][mysqld-5.7.21-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE count(0) from test where (ip: "66.249.69.136" ) and (date: "17/'Jan.."2015:10' at line 1.

faridlesosibirsk commented 6 years ago

93 adoquery1.ExecSQL; - не нада

88 ADOQuery1.SQL.text := 'insert test (ip,date,url,code,size) values ("' + a1 + '", "' + a2 + '","' + a3 + '","' + a4 + '","' + a5 + '") WHERE count(0) =(select count(*) from test where (ip= "' + a1 + '" ) and (date= "' + a2

исправил, нада проверить