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


Автор: JamesQ 6.8.2010, 16:46
есть таблица (Access), в ней столбец "ID", в столбце значения не по порядку идут 2, 14, 17, 36, 81. помогите так запрос составить, чтобы по нажатию кнопки эти значения изменились на 1, 2, 3, 4, 5.
кусок кода
Код

j:=ADOQuery1.RecordCount;
for i:=1 to j do
begin
with ADOQuery1 do
begin
Active:=False;
SQL.Clear;
SQL.Text:='UPDATE train SET Номер=:param1';
Parameters.ParamByName('param1'):=i;
ExecSQL;
Active:=True;
end;
end;


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

Автор: Данкинг 6.8.2010, 19:46
Цитата(JamesQ @  6.8.2010,  17:46 Найти цитируемый пост)
но программа меняет все значения в столбце на i, как быть? 

Добавить условие where или же вместо запроса использовать цикл (в данном случае будет логичнее).

Автор: JamesQ 7.8.2010, 08:09
через WHERE не получается у меня всего два столбца, в одном ID в другом название, а через цикл, так я вроде и делаю в цикле

Автор: Vas 7.8.2010, 08:16
Одним запросом такое не сделать, либо хранимую процедуру писать (хз есть они в акцессе или нет) или циклом в дельфи перебирать все записи и каждой менять id уже запросом
Код

i:=1;
while not Query1.Eof do
begin
   Query2.SQL.Clear;
  Query2.SQL.Add('update table set id='+IntToStr(i)+'where id='+Query1.FieldByName('id').AsString);
  Query2.ExecSQL;
  i:=i+1;
end;


ЗЫ: код не проверял, дельфей установленных нема

Добавлено через 1 минуту и 10 секунд
Забыл добавить, Query1 естественно сначала выбирает все записи отсортированные по id.

Автор: Данкинг 7.8.2010, 10:21
Циклом - я имел в виду через .Edit ... .Post, а не запросом. Запрос же будет каждый раз перебирать все записи.

Автор: Antimol 7.8.2010, 21:31
Самое элементарное что приходит на ум:
Я работаю с ADOConnection, AdoTable. 
В БД есть таблица с полем  id - поле в котором нужно изменять нумерацию.
1. размещаем на форме компонент AdoConnection - настраиваем подключение
2. размещаем на форме компонент AdoTable - подключаем к AdoConnection и выбирам таблицу которую нужно редактировать
3. размещаем на форме кнопку. На событие onClick пишем следующий код:

Код

var
  I: integer;
begin
  with ADOTable1 do
  begin
    First;
    for I := 0 to recordCount do
    begin
      Edit;
      FieldByName('id').Value:=i;
      Post;
      Next;
    end;
  end;
end;


Автор: JamesQ 8.8.2010, 06:15
а значения в базе тоже поменяются?

Автор: Akella 8.8.2010, 12:05
JamesQ, ты для начала скажи, что вообще нужно? Мож ты просто не правильно вопрос задал?
Может тебе просто нужно отсортировать значения в DBGrid`е, вместо того, что бы изменять значения ID. И вообще, значения ID (как правило это ключевое поле) менять нельзя ни под каким предлогом.

Автор: JamesQ 8.8.2010, 18:24
есть таблица, в ней два столбца ID и 'Название', по мере добавления и удаления записей значения ID расположились не по порядку 2, 3, 7, 10, 12 и т.д. это доставляет некие неудобства пользователю, хотелось бы чтобы в DBGrid и в самой таблице тоже эти значения изменились на 1, 2, 3, 4, 5, по нажатию кнопки или при загрузке формы

Автор: Данкинг 8.8.2010, 18:46
Цитата(JamesQ @  8.8.2010,  19:24 Найти цитируемый пост)
хотелось бы чтобы в DBGrid и в самой таблице тоже эти значения изменились на 1, 2, 3, 4, 5, по нажатию кнопки или при загрузке формы 

Не проще запросом выбрать записи в нужном порядке?

Автор: Akella 8.8.2010, 19:15
А я о чём.

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