pos:=i;
end;
fieldsExpected:=0;
colscntr:=0;
if ClientDataSet1.FieldByName('ISWHERE').AsInteger = 1 then begin
for i:=1 to 4 do begin
if ClientDataSet1.FieldByName('WHERE'+IntTostr(i)).IsNull then break
else begin
whr[fieldsExpected+1]:=ClientDataSet1.FieldByName('WHERE'+IntTostr(i)).AsString;
for j:=1 to length(whr[fieldsExpected+1]) do if whr[fieldsExpected+1][j]='^' then
whr[fieldsExpected+1][j]:=#39;
end;
Inc(fieldsExpected);
end;
buf:='';
i:=sqltextpos;
//поля в WHERE
if i>pos-2 then begin
Memo1.Text:='Ошибка'#13#10'В операторе where ожидалось условие.';
result:=-1;
exit;
end;
while i<=pos-2 do begin
inc(i);
j:=0;
if istokpresent(' AND ',i) then j:=1;
if istokpresent(' OR ',i) then j:=2;
if (j=1) or (j=2) then begin
if j<>ClientDataSet1.FieldByName('w'+IntToStr(colscntr+1)).AsInteger then begin
Memo1.Text:='Ошибка'#13#10'В запросе указано неправильное логическое условие.';
result:=-1;
exit;
end;
if colscntr>3 then begin
Memo1.Text:='Ошибка'#13#10'В запросе указаны лишние условия.';
result:=-1;
exit;
end;
if j=1 then inc(i,4);
if j=2 then inc(i,3);
if sqltext[i]=' ' then inc(i);
inc(colscntr);
if buf[length(buf)]=' ' then SetLength(buf, length(buf)-1);
cols[colscntr]:=buf;
buf:='';
end;
buf:=buf+sqltext[i];
end;
if colscntr>3 then begin
Memo1.Text:='Ошибка'#13#10'В запросе указаны лишние условия.';
result:=-1;
exit;
end;
inc(colscntr);
if buf[length(buf)]=' ' then SetLength(buf, length(buf)-1);
cols[colscntr]:=buf;
buf:='';
if colscntr<>fieldsExpected then
begin
Memo1.Text:='Ошибка'#13#10'Количество условий, введенное вами, не соответствует ожидаемому.';
result:=-1;
exit;
end;
for i:=1 to colscntr do begin
FieldFound:=false;
for j:=1 to colscntr do begin
if whr[i]=cols[j] then begin FieldFound:=true; break; end;
end;
if not FieldFound then begin
Memo1.Text:='Ошибка'#13#10'Неправильное условие в операторе WHERE';
result:=-1;
exit;
end;
end;
end;
result:=0;
end;
function TSQLFormX.UpdateAnalyse:smallint;
begin
result:=-1;
end;
function TSQLFormX.InsertAnalyse:smallint;
begin
result:=-1;
end;
function TSQLFormX.DeleteAnalyse:smallint;
begin
result:=-1;
end;
function TSQLFormX.SQLTypeTest:smallint;
begin
result:=-1;
case ClientDataSet1.FieldByName('TIP').AsInteger of
1: begin
if istokpresent('SELECT',1) then begin
try
result:=SelectAnalyse;
except on e:exception do begin
Memo1.Text:='Ошибка'#13#10'Ошибочно написан оператор SELECT';
result:=-1;
exit;
end;
end;
exit;
end
else begin
Memo1.Text:='Вы ошиблись.'#13#10'Ожидался SELECT запрос';
DBGrid1.Visible:=false;
Memo1.Visible:=true;
exit;
end;
end;
2: if istokpresent('UPDATE',1) then begin result:=UpdateAnalyse; exit; end
else begin
Memo1.Text:='Вы ошиблись.'#13#10'Ожидался UPDATE запрос';
DBGrid1.Visible:=false;
Memo1.Visible:=true;
exit;
end;
3: if istokpresent('INSERT',1) then begin result:=InsertAnalyse; exit; end
else begin
Memo1.Text:='Вы ошиблись.'#13#10'Ожидался INSERT запрос';
DBGrid1.Visible:=false;
Memo1.Visible:=true;
exit;
end;
4: if istokpresent('DELETE',1) then begin result:=DeleteAnalyse; exit; end;
else begin
Memo1.Text:='Вы ошиблись.'#13#10'Ожидался DELETE запрос';
DBGrid1.Visible:=false;
Memo1.Visible:=true;
exit;
end;
end;
Memo1.Text:='Вы ошиблись.'#13#10'Ожидался другой запрос';
DBGrid1.Visible:=false;
Memo1.Visible:=true;
end;
procedure TSQLFormX.SpeedButton1Click(Sender: TObject);
var i, cnt:longword;
begin
if inproc then exit;
inproc:=true;
if (tries=0) then begin
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.