![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
База данных на FoxPro [D6]
TAN_K © (2006-02-17 15:19:00)Господа , есть база на FoxPro , в таблице необходимо удалить запись , параметры которой предварительно выбрала из базы созданной в Expert (Baza.gdb) . Вопрос - где и что неправильно делаю ,
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('Select * from F_LKART.DBF where (STRAXN = :P0)');
Query3.SQL.Add('and (FAM = :P1) and (IM = :P2) and (OT = :P3)');
Query3.Params[0].AsString := IBQuery1['STRAXN'];
Query3.Params[1].AsString := IBQuery1['FAM'];
Query3.Params[2].AsString := IBQuery1['IM'];
Query3.Params[3].AsString := IBQuery1['OT'];
Query3.ExecSQL;
Query3.Close;
Query3.Open;
Query3.Edit;
UpdateSQL1.SetParams(ukDelete);
UpdateSQL1.ExecSQL(ukDelete);
// UpdateSQL1.Apply(ukDelete);
На операторе UpdateSQL1.ExecSQL(ukDelete) дает ошибку - Update failed .
Всем спасибо .
Desdechado (2006-02-20 10:08:00) [1]
Query3.ExecSQL;
Query3.Close;
Query3.Open;
кажется несколько странным, что без изменения текста запроса делается сначала ExecSQL, а затем Open
КаПиБаРа (2006-02-20 09:32:00) [2]TAN_K (17.02.06 17:25) [5]
Для начала нужно отладить запрос на удаление. Для этого к запросу приведенному в [0], тот который с селект подключи DBGrid. Вместо удаления, строки будут отображаться и можно будет проверить правильность работы выборки.
После отладки Select заменяется на Delete
Sergey13 (2006-02-20 09:19:00) [3]2[5] TAN_K (17.02.06 17:25)
>Регистр одинаковый , ФИО необходимо , т.к. страх № может не быть (такие ситуации бывают) .
Есть еще такое понятие в БД как ключ. Бывают ключи первичные, альтернатвные, внешние. Тебе наверное надо почитать про это.
TAN_K (2006-02-17 17:25:00) [4]Регистр одинаковый , ФИО необходимо , т.к. страх № может не быть (такие ситуации бывают) .
Решила провести эксперимент на удаление - сделала такой запрос :
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add('Delete from F_LKART.DBF);
Query3.ExecSQL;
выдает сообщение - Cursor ....
все записи в таблице FoxPro - F_LKART.DBF оказались помеченными на удаление , таблицу необходимо сжать , в FoxPro есть оператор Pack , есть ли что-то подобное в Delphi .
Sergey13 (2006-02-17 15:49:00) [5]2[2] TAN_K (17.02.06 15:42)
>Не удаляет !
Возможно просто не находит запись, потому что регистр буковок разный. И зачем ФИО вообще в параметрах? Страхового номера, ИМХО, вполне достаточно, он же должен быть уникальным.
(если я правильно телепатироал названия полей 8-)
Johnmen (2006-02-17 15:45:00) [6]Это гремучая мешанина из двух способов удаления, из набора данных и с помощью прямого запроса, естественно работать не может.
Следовательно, надо разобраться с каждым вариантом отдельно...
TAN_K (2006-02-17 15:42:00) [7]Не удаляет !
Я так уже пробовала , и после вашего совета - эффект тот же , не хватает какай-то мелочи .
Sergey13 (2006-02-17 15:24:00) [8]
Query3.Close;
Query3.SQL.Clear;
Query3.SQL.Add(' Deletefrom F_LKART.DBF where (STRAXN = :P0)');
Query3.SQL.Add('and (FAM = :P1) and (IM = :P2) and (OT = :P3)');
Query3.Params[0].AsString := IBQuery1['STRAXN'];
Query3.Params[1].AsString := IBQuery1['FAM'];
Query3.Params[2].AsString := IBQuery1['IM'];
Query3.Params[3].AsString := IBQuery1['OT'];
Query3.ExecSQL;