Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Удаление выделенной строки из DBGrid БЕЗ Ado


Автор: Solominka 18.12.2009, 18:33
Здравствуйте, уже битый день сижу над проблемой удаления выделенной строки из Базы Данных в Delphi через компонент DBGrid. Написала код для очищения всей таблицы, а нужно чтобы удаляло только выделенную строку после нажатия кнопки.
Перерыла пол интернета, но везде какие-то ADO-компоненты,а  у меня обычные Query...
Подскажите пожалуйста, что нужно исправить, чтобы удаляло одну строку?
Вот код, удаляющий все записи в таблице и БД:

Цитата

begin

Query1.SQL.Text:='delete from zakaz where id='+
Form3.Query1.FieldByName('ID').AsString;
Form3.Query1.FieldByName('Parametr').AsString;
Query1.SQL.Add('SELECT * from Zakaz');

end;


Автор: Данкинг 18.12.2009, 18:52
Цитата(Solominka @  18.12.2009,  18:33 Найти цитируемый пост)
удаления выделенной строки из Базы Данных в Delphi через компонент DBGrid

 smile  smile  smile 

Цитата(Solominka @  18.12.2009,  18:33 Найти цитируемый пост)
но везде какие-то ADO-компоненты,а  у меня обычные Query.

Обычные Query? smile  А подключаешься-то через что? И какая СУБД?

Цитата(Solominka @  18.12.2009,  18:33 Найти цитируемый пост)
Вот код, удаляющий все записи в таблице и БД:

Это что за бред? smile Удаление всех записей из таблицы осуществляется запросом, к примеру:
Код

AdoQuery.Close;
AdoQuery.SQL.Clear;
AdoQuery.SQL.text:='delete from TABLE';
AdoQuery.ExecSQL;

Если же требуется удалить только ту строку, на которой стоит курсор в Гриде, то никаких запросов не надо, достаточно просто:
Код

AdoTable.Delete;

AdoTable - это тот набор данных, который отображается в Гриде. 

Автор: Solominka 18.12.2009, 19:24
Эмм...
Если честно ответов на ваши вопросы я не знаю... У меня нет никаких ADO в программе... НИ ЕДИНОГО НЕТ... И с ними НИЧЕГО не работает в моей программе

Вот исходники... Интересует форма 3... Там есть кнопка "Удалить заказ", в от к ней надо написать код этого самого удаления строки из таблицы и БД...
http://www.sendspace.com/file/kmzd2p
Чтобы работало нужно просто скопировать извлечённую папку на диск С.

Программа была написана по тому же принципу, что и делались лабораторные работы, поэтому там и нет этих ADO и я не знаю что это такое....


Автор: Данкинг 18.12.2009, 20:11
Цитата(Solominka @  18.12.2009,  19:24 Найти цитируемый пост)
Если честно ответов на ваши вопросы я не знаю...

И какая СУБД не знаешь? smile  smile  smile Тогда сначала почитай умные книжки - мой тебе совет. smile А с темами "ничего не знаю (+10 грустных смайликов), сделайте за меня (+15 весёлых смайликов)" - это http://forum.vingrad.ru/forum/Vingrad-help-center.html

Добавлено @ 20:13
Цитата(Solominka @  18.12.2009,  19:24 Найти цитируемый пост)
Программа была написана по тому же принципу, что и делались лабораторные работы

Да, нам это о многом говорит. smile 

Автор: Solominka 18.12.2009, 20:19
Способ доступа - BDE... База данных Microsoft SQL Server 2005 кажется...
К сведению, я заочница и нам вообще ничего не объясняют, а читать умные книжки, в которых всё заумным языком написано и ничерта не понятно - у меня нет времени. Программа НАПИСАНА, просто нужно исправить пару вещей которые РАБОТАЮТ, просто не совсем так как хотелось бы...

Автор: Данкинг 18.12.2009, 20:26
Извиняюсь за. smile 
 smile 

Цитата(Solominka @  18.12.2009,  20:19 Найти цитируемый пост)
База данных Microsoft SQL Server 2005 кажется...

А в примере - Парадокс. smile 

Цитата(Solominka @  18.12.2009,  20:19 Найти цитируемый пост)
К сведению, я заочница и нам вообще ничего не объясняют

Ах, ничего не объясняют, только спрашивают. Ужас. smile 

Цитата(Solominka @  18.12.2009,  20:19 Найти цитируемый пост)
а читать умные книжки, в которых всё заумным языком написано и ничерта не понятно - у меня нет времени. 

А зачем тебе высшее образование, если ты не только ничего не знаешь, но и не стремишься к знаниям?

Цитата(Solominka @  18.12.2009,  20:19 Найти цитируемый пост)
исправить пару вещей которые РАБОТАЮТ, просто не совсем так как хотелось бы... 

"Если не можешь исправить вещи - измени своё отношение к ним". smile





Автор: Solominka 18.12.2009, 20:28
С этими двумя ошибками я сижу уже двое суток...
Данкинг, вижу что вам весело,  вы только стебётесь, вместо того чтобы хотя бы попытаться помочь...
Рада за Вас...

Автор: Данкинг 18.12.2009, 20:30
Цитата(Solominka @  18.12.2009,  20:28 Найти цитируемый пост)
С этими двумя ошибками я сижу уже двое суток...

А с семью ошибками бы недельку посидела? smile 

Цитата(Solominka @  18.12.2009,  20:28 Найти цитируемый пост)
чтобы хотя бы попытаться помочь...

Да я бы рад попытаться, кабы знал, в чём.

Автор: Solominka 18.12.2009, 20:46
Данкинг, я и с двумя ошибками могу сидеть неделю...
Программу тем не менее я писала сама всю...

А что, проблема описана вполне подробно... А то, что вы не юзаете Прадокс и у вас нет Диска С, это уже другой вопрос...

Автор: chip_and_dayl 18.12.2009, 21:33
Код

Query1.SQL.Text:='delete from zakaz where id='+
Form3.Query1.FieldByName('ID').AsString;
Query1.ExecSQL;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * from Zakaz');
Query1.Open;


Добавлено через 2 минуты и 1 секунду
в кнопке удалить ставишь этот код, свой удаляй

Автор: Solominka 18.12.2009, 21:41
chip_and_dayl, благодарю!
Всё подогнала под свою БД, всё работает!
Очень рада!

Зы: я уже сама всё поменяла, что где надо)))

p.S. С меня 2 торта  smile 


А можно ещё маленький, наверное оочень глупый, но всё же вопрос, касающийся прошлой задачи... вот там мне надо чтобы сумма при удалении из строки в StringGrid пересчитывалась, т.е. отнималась та сумма, ячейки которая удаляется...
Как правильно то сделать?

Я наивно полагала, что можно сделать так:

Цитата

  st:=st-Query1.FieldByName('Stoimost').AsInteger;
 Edit1.Text:=IntToStr(st)+' руб.'


Но оно как-то не так считает :(

Автор: chip_and_dayl 18.12.2009, 21:50
ну да, удалять нужно сумму, которая убирается со СтрингГрид, а не ДбГрид
st:=st-StringGrid1.Cells[номер столбика где сумма];
 Edit1.Text:=IntToStr(st)+' руб.'

Автор: Данкинг 18.12.2009, 21:50
Цитата(Solominka @  18.12.2009,  20:46 Найти цитируемый пост)
А что, проблема описана вполне подробно...

Ну-ну.

Цитата(Solominka @  18.12.2009,  20:46 Найти цитируемый пост)
А то, что вы не юзаете Прадокс и у вас нет Диска С, это уже другой вопрос...

По поводу парадокса - согласен, а по поводу диска C: - нет. Если ты напишешь программу, принесёшь её клиенту, а там выяснится, что диска С или нет, или нет прав на запись на него (часто системный диск защищают от глупых юзверей), то что ответишь на вопрос "почему ваша программа не работает"? В идеале, должен существовать конфигурационный файл, в котором прописан путь к БД.

Добавлено через 1 минуту и 40 секунд
Кстати, тема " Удаление выделенной строки из DBGrid БЕЗ Ado " - это тоже круть. smile 

Автор: chip_and_dayl 18.12.2009, 21:56
Цитата(Данкинг @  18.12.2009,  21:50 Найти цитируемый пост)
конфигурационный файл, в котором прописан путь к БД.

Я всегда прописываю так путь к базе GetCurrecyDir+'\имябазы'. И никаких проблем нетуsmile 

По поводу темы да, я сам было подумал, что нужно удалить с отображения строку, но не с базы

Автор: Solominka 18.12.2009, 21:57
chip_and_dayl, написала ему:

Цитата

st:=st-StringGrid1.Cells[w,4];
 Edit1.Text:=IntToStr(st)+' руб.'


Жалуется на типы данных по-моему...


Данкинг, к счастью программы на заказ я не пишу... smile
Чего не умеем, того не умеем пока, к сожалению...

Автор: chip_and_dayl 18.12.2009, 22:09
Код

st:=st-StrToFloat(StringGrid1.Cells[w,4]);
 Edit1.Text:=IntToStr(st)+' руб.'

Автор: Solominka 18.12.2009, 22:11
chip_and_dayl, пишет Incompatible types: 'Integer' and 'Extended' :(

Автор: chip_and_dayl 18.12.2009, 22:13
ооо..так у тебя походу целое число. А куда копейки деваем?) 

Код

st:=st-StrToInt(StringGrid1.Cells[w,4]);
 Edit1.Text:=IntToStr(st)+' руб.'

Автор: Solominka 18.12.2009, 22:14
chip_and_dayl, хороший вопрос... =__= не знаю... что-то я перепутала по-моему...

Пишет мне теперь, что is not a valid integer value... И что с этим делать?

Автор: Данкинг 18.12.2009, 22:16
Цитата(chip_and_dayl @  18.12.2009,  21:56 Найти цитируемый пост)
Я всегда прописываю так путь к базе GetCurrecyDir+'\имябазы'. И никаких проблем нету

Ну правильно, а база лежит в каталоге с программой.

Цитата(Solominka @  18.12.2009,  22:14 Найти цитируемый пост)
Incompatible types: 'Integer' and 'Extended' :( 

Значит, переменной, объявленной как целое число (integer) ты пытаешься присвоить дробное значение (extended).

Автор: chip_and_dayl 18.12.2009, 22:18
кстати, только дошло, вместо StringGrid1.Cells[w,4] нужно StringGrid1.Row 
ПО поводу ошибки сейчас исходник гляну

Добавлено через 1 минуту и 14 секунд
если быть правильным то Ст должен быть float

Добавлено через 7 минут и 24 секунды
Цитата(Данкинг @  18.12.2009,  22:16 Найти цитируемый пост)
Значит, переменной, объявленной как целое число (integer) ты пытаешься присвоить дробное значение (extended).

 
Только не могу понять где

з. Ы. Спс за сам знаешь что :)

Автор: Solominka 18.12.2009, 22:26
chip_and_dayl, сплошь ошибки... на st:float в var вообще жалуется, что неопознанный идетификатор... На остальное  Array type required

Автор: chip_and_dayl 18.12.2009, 22:29
ой,  с С++ перепутал. Вместо float real
А ошибки потому что вместо StrToInt где показывает ошибку нужно  StrToFloat или  FloatToStr если написано IntToSTr

Автор: Solominka 18.12.2009, 22:34
chip_and_dayl, написала ему:

Цитата

st:=st-StrToInt(StringGrid1.Row[w,4]);


Жалуется, что: Array type required

Автор: chip_and_dayl 18.12.2009, 22:35
st:=st-StrToInt(StringGrid1.Row);

Добавлено через 31 секунду
и если Ст real, то нужно писать StrToFloat

Автор: Solominka 18.12.2009, 22:41
chip_and_dayl, чёто вообще фигня какая-то получается:

Цитата

st:=st-StrToInt(StringGrid1.Row);
 Edit1.Text:=StrToFloat(st)+' руб.'

Автор: chip_and_dayl 18.12.2009, 22:43
Код

st:=st-StrTofLOAT(StringGrid1.Row);
 Edit1.Text:=StrToFloat(st)+' руб.'


Добавлено через 5 минут и 38 секунд
Код

st:=st-StrTofLOAT(StringGrid1.Row);
 Edit1.Text:=FloatToStr(st)+' руб.'

Автор: Solominka 18.12.2009, 22:48
chip_and_dayl, выдают ошибку:

There is no overloaded version of 'StrToFloat' that can be called with these arguments

П.С. St как real я объявила...

Автор: chip_and_dayl 18.12.2009, 22:49
FloatToStr - число с плавающей запятой преобразовать в строку
StrToFloat - строку преобразовать в число с плав. запятой

Автор: Данкинг 18.12.2009, 22:50
Цитата(chip_and_dayl @  18.12.2009,  22:18 Найти цитируемый пост)
з. Ы. Спс за сам знаешь что smile 

Я же добрый! smile 

Автор: chip_and_dayl 18.12.2009, 22:50
смотри выше поправку

Автор: Solominka 18.12.2009, 23:03
chip_and_dayl, он продолжает жаловаться... Я уже не знаю, что мне делать (((
Пишет: There is no overloaded version of 'StrToFloat' that can be called with these arguments

Автор: chip_and_dayl 18.12.2009, 23:10
Прикрепи исходник


Автор: Solominka 18.12.2009, 23:15
Прикрепила

Автор: chip_and_dayl 18.12.2009, 23:31
ПОра мне уже спать, а то тупить начал

А ты молодец, сначала удаляешь запись, а потом обращаешься к строке, которой нету)

Автор: Solominka 18.12.2009, 23:38
chip_and_dayl, ой.... даже стыдно как-то стало...
Безмерно вам благодарна! smile
Замучала я вас наверное сегодня...
Выслала бы я вам тортики, да только до Украины они месяц будут идти и стухнут :(

Автор: Данкинг 19.12.2009, 00:00
 smile 
Цитата(Solominka @  18.12.2009,  23:38 Найти цитируемый пост)
Выслала бы я вам тортики, да только до Украины они месяц будут идти и стухнут :(

Ты как-то плохо думаешь о Почте России. smile 

Автор: vovk 19.12.2009, 20:33
А не подскажете на кого учитесь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)