Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2010, 01:30   #11
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Объясните мне смысл, например, вот этого куска кода (для начала):
Код:
cnt:=0;
  bmk:=Form1.DBGridEh2.DataSource.DataSet.GetBookmark; 
  try
    Form1.DBGridEh2.DataSource.DataSet.First; 
    while not Form1.DBGridEh2.DataSource.DataSet.Eof do begin;
      Inc(cnt);
      Form1.DBGridEh2.DataSource.DataSet.Next;
    end;
    Form1.DBGridEh2.DataSource.DataSet.GotoBookmark(bmk);
  finally
    Form1.DBGridEh2.DataSource.DataSet.FreeBookmark(bmk);
    Form1.DBGridEh2.DataSource.DataSet.EnableControls;
    end;
Разве это нельзя сделать простым запросом SELECT MAX(STR_ID) FROM DETALS ? И присвоить это значение вашему CNT...
И по букмаркам зачем-то прыгаете... Они же у вас ни для чего не используются...
И еще. Вам не лень писать в каждой строке DBGridEh2.DataSource.DataSet ? Ведь это наверняка просто ZQuery2...

Последний раз редактировалось mihali4; 04.01.2010 в 01:33.
mihali4 вне форума Ответить с цитированием
Старый 04.01.2010, 02:03   #12
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Я с вами согласен. Сам эот косяк заметил, сейчас исправлю, но если проблема не исчезнет, то не оставляйте меня с ней наедине))
А как присвоить cnt значение максимума str_id?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 04.01.2010 в 02:11.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 04.01.2010, 02:57   #13
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А это у вас будет опять-таки Fields[0].Value того Query, которым вы будете делать запрос...
mihali4 вне форума Ответить с цитированием
Старый 04.01.2010, 02:59   #14
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Не канает... Уже попробывал. Писал вот так:
Код:
ZQuery1.SQL.Text:='Select MAX(str_id) from detals';
 ZQuery1.ExecSQL;
 cnt:=ZQuery1.Fields[0].Value;
 Form1.ZQuery2.Refresh;
 Showmessage(inttostr(cnt));
типа он должен выдать сообщение, содержащее максимальный номер, но выдает ошибку List index out of bounds (0)
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 04.01.2010 в 03:01.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 04.01.2010, 03:02   #15
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вы же результат хотите в ZQuery1 получить?
Тогда нужно делать ZQuery1.Open, а не ZQuery1.ExecSQL !
mihali4 вне форума Ответить с цитированием
Старый 04.01.2010, 03:05   #16
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Я просто не очень хорошо разбираюсь в этом... только учусь. Это магия!!! ))))) Он определяет максимум)))
И всё равно, несмотря на это. Продолжает повторятсявставка новой строчки вместо удалённой
Есть идеи по этому поводу?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось ImmortalAlexSan; 04.01.2010 в 03:11.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 04.01.2010, 03:16   #17
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

По поводу "магии". Тут все очень просто.
Запросы типа DELETE, INSERT, UPDATE - которые не возвращают набор данных, выполняются через ExecSQL.
Запрос SELECT, который по определению служит для получения набора данных - через Open...
Цитата:
Продолжает повторяться вставка новой строчки вместо удалённой
Я этой фразы не понимаю. Где вы это смотрите? У вас данные сортируются по первому полю?
mihali4 вне форума Ответить с цитированием
Старый 04.01.2010, 03:24   #18
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

Ну вот смотрите... есть таблица.
1 а
2 б
3 в
4 г
5 д
это номера строк
Я удаляю одну строку не самую нижнюю (например 2) с помощью этого кода:
Код:
ZQuery2.SQL.Text:='Update detals set str_id='''+IntToStr(-1)+''', izdel_id=izdel_id, detal_id=detal_id,detal_name=detal_name,detal_kol_izd=detal_kol_izd,
pokr_name=pokr_name,detal_info=detal_info where str_id='+Form1.DBGridEh2.Columns[0].Field.AsString;
ZQuery2.ExecSQL;
Form1.DBGridEh2.DataSource.DataSet.next;
If Form1.DBGridEh2.DataSource.DataSet.Eof=true then
begin
ZQuery2.SQL.Text:='Delete from detals where str_id='+inttostr(-1);
ZQuery2.ExecSQL;
Form1.ZQuery2.Refresh;
end
else
begin
ZQuery2.SQL.Text:='Delete from detals where str_id='+inttostr(-1);
ZQuery2.ExecSQL;
Form1.ZQuery2.Refresh;
  Form1.DBGridEh2.DataSource.DataSet.DisableControls;
  cnt := 0;
  try
    Form1.DBGridEh2.SelectedRows.DataSet;
    while not Form1.DBGridEh2.DataSource.DataSet.Eof do begin;
      Inc(cnt);
      ZQuery2.SQL.Text:='Update detals set str_id='''+IntToStr(Form1.DBGridEh2.Fields[0].Value-1)+''', izdel_id=izdel_id, detal_id=detal_id,
 detal_name=detal_name, detal_kol_izd=detal_kol_izd, pokr_name=pokr_name, detal_info=detal_info where str_id='+Form1.DBGrideh2.Columns[0].Field.AsString;
      ZQuery2.ExecSQL;
      Form1.DBGridEh2.DataSource.DataSet.Next;
    end;
      Form1.ZQuery2.Refresh;
  finally
    Form1.DBGridEh2.DataSource.DataSet.EnableControls;
    showmessage('Количество строк='+inttostr(cnt));
    end;
end;
close();
end;
у меня получается:
1 а
2 в
3 г
4 д
Но тут вот запара! Когда я добавляю строку с помощью вот этого кода:
Код:
begin
 ZQuery1.SQL.Text:='Select MAX(str_id) from detals';
 ZQuery1.Open;
 cnt:=ZQuery1.Fields[0].Value;
 Form1.ZQuery2.Refresh;
 ZQuery1.SQL.Text:='Insert into detals (str_id, izdel_id, detal_id, detal_name, detal_kol_izd, pokr_name, detal_info) values ('''+IntToStr(cnt+1)+''','''+
Edit1.Text+''','''+edit2.Text+''','''+edit3.Text+''','''+edit4.Text+''','''+edit5.Text+''','''+edit6.Text+''')';
 ZQuery1.ExecSQL;
 Form1.ZQuery2.Refresh;
 end;
close();
end;
То вместо того, что встать вниз таблицы, она становится на место удаленной:
1 а
5 е
2 в
3 г
4 д
Но когда потом я добавляю строки они все добавляются вниз таблицы
1 а
5 е
2 в
3 г
4 д
6 ё
7 ж
8 з
и т.д. в этом проблема... какой-то косяк в коде...
Просто для самой нижней строки у меня отдельное условие, по достижению конца файла, строка удаляется и ничего смещать не надо.
Если что-то надо пояснить в коде №1 вы напишите я всё поясню.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"

Последний раз редактировалось mihali4; 04.01.2010 в 12:25.
ImmortalAlexSan вне форума Ответить с цитированием
Старый 04.01.2010, 12:25   #19
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Чем вы забираете данные из таблицы отображаемой в Gride?
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 04.01.2010, 12:32   #20
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Не понимаю вообще этого гимора с бесконечной корректировкой str_id...
Это поле должно быть автоинкрементным.
Но если у вам хочется простые вещи делать через..., ну, в общем, как обычно...
Тогда хотя бы
Код:
Form1.ZQuery2.Refresh;
замените на
Код:
Form1.ZQuery2.Close;
Form1.ZQuery2.Open;
Рефреш в квэри не работает как надо.
mihali4 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Окраска ячейки в зависимости от значения Апчхи Microsoft Office Excel 6 16.08.2009 19:31
сохранение изменений в DBGrid/DBGridEh, при изменении фокуса ячейки dalien БД в Delphi 6 30.07.2009 15:36
Очистить значения после определённой ячейки Sorro Microsoft Office Excel 1 08.05.2009 12:03
Извлечение значения ячейки с использованием функции Сцепить Юрийpirs2008 Microsoft Office Excel 2 03.03.2009 11:13
проблема с выбором значения ячейки ssh Общие вопросы .NET 0 17.01.2009 00:17