Форум: "Начинающим";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];
ВнизВыполнение запроса с цифрами Найти похожие ветки
← →
psa247 (2008-06-23 00:34) [0]Доброго времени суток !
Имеется 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), лишних пробелов нет
← →
Поросенок Винни-Пух © (2008-06-23 01:24) [1]то запрос отрабатывает, но в базу не пишет.
если не пишет, значит и не "отрабатывает"
← →
psa247 (2008-06-23 01:34) [2]ну а чтоб отработал, соответственно, и записывал в базу и поиск производил, что надо ?
← →
Поросенок Винни-Пух © (2008-06-23 01:40) [3]да практически ничего, кроме правильного текста запроса
← →
psa247 (2008-06-23 09:46) [4]текст запроса правильный, т.к. в SQl-редакторе IBExpert-а выдает нужное число записей.
Может, наведет на мысль:
FindEdit - компонент MaskEdit
пробовал вместо LIKE использовать .... AND (INN="+chr(39)+Trim(FindEdit.Text)+chr(39)+") AND....
и затроенные кавычки пробовал """ - результат такой же, одни наборы цифр пишет, другие нет
← →
Sergey13 © (2008-06-23 09:53) [5]> [4] psa247 (23.06.08 09:46)
> текст запроса правильный, т.к. в SQl-редакторе IBExpert-
> а выдает нужное число записей.
Значит ошибка в твоей программе.
Но ты же партизан - вместо кода выдаешь только свои мысли о нем.
← →
Поросенок Винни-Пух © (2008-06-23 10:10) [6]> а выдает нужное число записей.
У тебя же инсерт. Какое такое нужное число записей показывает запрос в эксперте?
← →
ЮЮ © (2008-06-23 10:37) [7]> Есть SQL-запрос
>
> if (Trim(FindEdit.Text)<>"") then SQL := SQL+" AND INN LIKE
> """+"%"+String(Trim(FindEdit.Text))+"%""";
Это только часть секции WHERE запроса. Причем формируемой в Дельфи. Причем формируемый идеологически неверно.
>текст запроса правильный, т.к. в SQl-редакторе IBExpert-а выдает нужное число записей.
правильный текст запроса ты не приводишь.
Полный текст кода, его формирующий — тоже.
И просишь найти ошибку в том, что видищь лиз сам. Не странно ли?
← →
Правильный-Вася (2008-06-23 10:50) [8]
> Тип поля CHAR(15), лишних пробелов нет
так бывает, только если поле заполнено под завязку, а у тебя неясно как
а в IBExpert по умолчанию пробелы отрезаются при отображении
← →
Anatoly Podgoretsky © (2008-06-23 11:36) [9]> Поросенок Винни-Пух (23.06.2008 1:40:03) [3]
Он тебя не понимает, какой еще текст запроса, а ты за это заплатил?
← →
psa247 (2008-06-23 13:44) [10]Инициализация:
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" - дает НЕПравильный результат
← →
psa247 (2008-06-23 13:47) [11]
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:48) [12]В этом запрос не заносит в базу 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)
+");";
← →
Поросенок Винни-Пух © (2008-06-23 13:53) [13]а теперь ShowMessage(SQL.Text) и найти 10 отличий с "правлильным" запросом
← →
psa247 (2008-06-23 13:54) [14]а нет отличий, проверял
← →
Поросенок Винни-Пух © (2008-06-23 13:55) [15]ты их не заметил
← →
Sergey13 © (2008-06-23 13:56) [16]> [12] psa247 (23.06.08 13:48)
А про параметрические запросы слышал что нибудь? Весьма пользительная штука.
ЗЫ: Я бы такие запросы тоже не стал обрабатывать. 8-)
← →
psa247 (2008-06-23 14:03) [17]---------------------------
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
---------------------------
ну и...
← →
Правильный-Вася (2008-06-23 14:08) [18]
> В SQL-редакторе: SELECT * FROM CLIENTS WHERE INOSTR="1"
> AND INN="1561546545456" дает правильный результат.
> SELECT * FROM CLIENTS WHERE INOSTR=0 AND INN="115615445545"
> ORDER BY FAMILIYA ASC;
где же правда
← →
Поросенок Винни-Пух © (2008-06-23 14:10) [19]соммита значит не было. читающая транзакция не видит вставленных данных
← →
psa247 (2008-06-23 14:17) [20]
> Правильный-Вася (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:19) [21]очепятка
предлагается по ним догадаться что там на самом деле?
← →
Sergey13 © (2008-06-23 14:26) [22]> [20] psa247 (23.06.08 14:17)
Какой смысл в последних двух строках?
← →
psa247 (2008-06-23 14:42) [23]Подтвердить транзакцию, вывести в ДБГрид
← →
Sergey13 © (2008-06-23 14:44) [24]> [23] psa247 (23.06.08 14:42)
Без них не выводится что-ли?
← →
psa247 (2008-06-23 15:01) [25]Без последнего IBQueryClients.Open; не выводит
← →
Поросенок Винни-Пух © (2008-06-23 15:04) [26]ну так чего как слепой котенок-то, честное слово?
не видно данных после инсерта - убери where и посмотри все что там есть.
не видно - зайди/выйди снова посмотри.
локализуй проблему-то!
← →
Sergey13 © (2008-06-23 15:06) [27]> [25] psa247 (23.06.08 15:01)
А про Transaction.Commit в справке почитать?
ЗЫ: IBX кстати с ФБ2 и не должен работать. Вернее его полная работоспособность не гарантирована.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.045 c