![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выполнение запроса с цифрами [D7]
psa247 © (2008-06-23 00:34:00)Доброго времени суток !
Имеется firebird 2/0/3
Есть SQL-запрос
if (Trim(FindEdit.Text)<>'') then SQL := SQL+' AND INN LIKE '''+'%'+String(Trim(FindEdit.Text))+'%''';
срабатывает через раз, т.е. если
FindEdit.Text = 123465789, то корректно
если, к примеру, 1154554655, то запрос отрабатывает, но в базу не пишет.
Тип поля CHAR(15), лишних пробелов нет
Sergey13 (2008-06-23 15:06:00) [1]> [25] psa247 (23.06.08 15:01)
А про Transaction.Commit в справке почитать?
ЗЫ: IBX кстати с ФБ2 и не должен работать. Вернее его полная работоспособность не гарантирована.
Поросенок Винни-Пух (2008-06-23 15:04:00) [2]ну так чего как слепой котенок-то, честное слово?
не видно данных после инсерта - убери where и посмотри все что там есть.
не видно - зайди/выйди снова посмотри.
локализуй проблему-то!
psa247 (2008-06-23 15:01:00) [3]Без последнего IBQueryClients.Open; не выводит
Sergey13 (2008-06-23 14:44:00) [4]> [23] psa247 (23.06.08 14:42)
Без них не выводится что-ли?
psa247 (2008-06-23 14:42:00) [5]Подтвердить транзакцию, вывести в ДБГрид
Sergey13 (2008-06-23 14:26:00) [6]> [20] psa247 (23.06.08 14:17)
Какой смысл в последних двух строках?
Поросенок Винни-Пух (2008-06-23 14:19:00) [7]очепятка
предлагается по ним догадаться что там на самом деле?
psa247 (2008-06-23 14:17:00) [8]
> Правильный-Вася (23.06.08 14:08) [18]
очепятка
OpenConnections(SuperUser);
IBDatabase.Open;
IBQueryClients.Close;
IBQueryClients.SQL.Clear;
IBQueryClients.SQL.Add(SQL);
IBQueryClients.Open;
IBQueryClients.FetchAll;
IBQueryClients.Transaction.Commit;
IBQueryClients.Open;
Поросенок Винни-Пух (2008-06-23 14:10:00) [9]соммита значит не было. читающая транзакция не видит вставленных данных
Правильный-Вася (2008-06-23 14:08:00) [10]
> В SQL-редакторе: SELECT * FROM CLIENTS WHERE INOSTR= '1'
> AND INN='1561546545456' дает правильный результат.
> SELECT * FROM CLIENTS WHERE INOSTR= 0AND INN='115615445545'
> ORDER BY FAMILIYA ASC;
где же правда
psa247 (2008-06-23 14:03:00) [11]---------------------------
INSERT INTO CLIENTS (INOSTR, FAMILIYA, IMYA, OTCHESTVO, BORN, PASSSERIA, PASSNOMER, PASSVYDAN, PASSKEM, ADDRESS, INFO, INN, OBLAST, RAION, TOWN, FIRM) VALUES (0, 'ПОРОСЕНОК', 'ПУХ', '', '01.01.2001', '2804', '445465', '05.01.2001', '', '', '', '1561655565454', '', '', '', -1);
---------------------------
SELECT * FROM CLIENTS WHERE INOSTR=0 AND INN='115615445545' ORDER BY FAMILIYA ASC;
---------------------------
OK
---------------------------
ну и...
Sergey13 (2008-06-23 13:56:00) [12]> [12] psa247 (23.06.08 13:48)
А про параметрические запросы слышал что нибудь? Весьма пользительная штука.
ЗЫ: Я бы такие запросы тоже не стал обрабатывать. 8-)
Поросенок Винни-Пух (2008-06-23 13:55:00) [13]ты их не заметил
psa247 (2008-06-23 13:54:00) [14]а нет отличий, проверял
Поросенок Винни-Пух (2008-06-23 13:53:00) [15]а теперь ShowMessage(SQL.Text) и найти 10 отличий с "правлильным" запросом
psa247 (2008-06-23 13:48:00) [16]В этом запрос не заносит в базу BIK банка
SQL := 'INSERT INTO FIRMS (';
SQL := SQL + 'NAME, INN, KPP, UADDRESS, PADDRESS, PHONE, DIREKTOR, BANK, BIK, RSCHET, KSCHET) VALUES(';
SQL := SQL +chr(39)+Trim(EditName.Text)+chr(39)+', '+chr(39)+Trim(EditINN.Text)+chr(39);
SQL := SQL +', '+chr(39)+Trim(EditKPP.Text)+chr(39)+', '+chr(39)+Trim(EditUrAddress.Text)+chr(39);
SQL := SQL +', '+chr(39)+Trim(EditFAddress.Text)+chr(39)+', '+chr(39)+Trim(EditPhone.Text)+chr(39);
SQL := SQL +', '+chr(39)+Trim(EditDir.Text)+chr(39)+', '+chr(39)+Trim(EditBank.Text)+chr(39);
SQL := SQL +', '+chr(39)+Trim(EditBIK.Text)+chr(39)+', '+chr(39)+Trim(EditRSchet.Text)+chr(39);
SQL := SQL +', '+chr(39)+Trim(EditKSchet.Text)+chr(39)
+');';
psa247 (2008-06-23 13:47:00) [17]
SQL := 'INSERT INTO CLIENTS (';
SQL := SQL+'INOSTR, FAMILIYA, IMYA, OTCHESTVO, BORN, PASSSERIA, PASSNOMER, PASSVYDAN, PASSKEM, ADDRESS, INFO, ';
SQL := SQL+'INN, OBLAST, RAION, TOWN, FIRM) VALUES (';
SQL := SQL + IntToStr(Integer(InostrCheck.Checked))+', '+chr(39)+Trim(FEdit.Text)+chr(39)+', '+chr(39);
SQL := SQL +Trim(IEdit.Text)+chr(39)+', '+chr(39)+Trim(OEdit.Text)+chr(39)+', '+chr(39);
SQL := SQL +DateToStr(BornDate.Date)+chr(39)+', '+chr(39)+Trim(PSEdit.Text)+chr(39)+', '+chr(39);
SQL := SQL +Trim(PNEdit.Text)+chr(39)+', '+chr(39)+DateToStr(PVDate.Date)+chr(39)+', '+chr(39);
SQL := SQL +Trim(PVKem.Text)+chr(39)+', '+chr(39)+Trim(AddressEdit.Text)+chr(39)+', '+chr(39);
SQL := SQL +Trim(InfoEdit.Text)+chr(39)+', '+chr(39)+Trim(INNEdit.Text)+chr(39)+', '+chr(39);
SQL := SQL +Trim(EditObl.Text)+chr(39)+', '+chr(39)+Trim(EditRaion.Text)+chr(39)+', '+chr(39);
SQL := SQL +Trim(EditTown.Text)+chr(39);
psa247 (2008-06-23 13:44:00) [18]Инициализация:
procedure TClientForm.RadioFindClick(Sender: TObject);
begin
FindEdit.Text := '';
if RadioFind.ItemIndex = 2 then FindEdit.EditMask := '9999-999999;1;#'
else
begin
FindEdit.EditMask := '';
FindEdit.Text := 'Введите строку для поиска';
end;
end;
SQL := 'SELECT * FROM CLIENTS ';
SQL := SQL + 'WHERE INOSTR='+IntToStr(Integer(CheckBoxInostr.Checked));
case RadioFind.ItemIndex of
0: begin
if (Trim(FindEdit.Text)<>'')AND(FindEdit.Text<>'ВВЕДИТЕ СТРОКУ ДЛЯ ПОИСКА') then SQL := SQL+' AND FAMILIYA='+chr(39)+Trim(FindEdit.Text)+chr(39);
end;
1: begin
if (Trim(FindEdit.Text)<>'')AND(FindEdit.Text<>'ВВЕДИТЕ СТРОКУ ДЛЯ ПОИСКА') then SQL := SQL+' AND INN='+chr(39)+Trim(FindEdit.Text)+chr(39);
end;
2: begin
if not(CheckBoxInostr.Checked) then
SQL := SQL+' AND PASSSERIA='+chr(39)+LeftStr(FindEdit.Text,4)+chr(39)+' AND PASSNOMER='+chr(39)+RightStr(FindEdit.Text,6)+chr(39)
else
// у иностранцев - по-другому
end;
end;
SQL := SQL + ' ORDER BY FAMILIYA ASC;';
В SQL-редакторе: SELECT * FROM CLIENTS WHERE INOSTR='1' AND INN='1561546545456' дает правильный результат.
В программе: INN='123456789' - дает правильный результат
НО: INN='1561546545456' - дает НЕПравильный результат
Anatoly Podgoretsky (2008-06-23 11:36:00) [19]> Поросенок Винни-Пух (23.06.2008 1:40:03) [3]
Он тебя не понимает, какой еще текст запроса, а ты за это заплатил?
Правильный-Вася (2008-06-23 10:50:00) [20]
> Тип поля CHAR(15), лишних пробелов нет
так бывает, только если поле заполнено под завязку, а у тебя неясно как
а в IBExpert по умолчанию пробелы отрезаются при отображении