Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

База данных на 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо