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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2008, 15:11   #1
One.Love
Пользователь
 
Регистрация: 13.01.2008
Сообщений: 91
По умолчанию работа с Access

Люди подскажите пожалуйста как в акцесовской базе данных на Delphi перенести допустим последнюю строчку на первое место или наоборот если можно киньте пожалуйста код. Заранее благодарен -)
One.Love вне форума Ответить с цитированием
Старый 02.06.2008, 15:52   #2
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

Может и некрасиво, а может есть вариант попроще, но я сделал так:
Код:
procedure TForm2.Button2Click(Sender: TObject);
var str,str1:string;
    i:integer;
begin
 ADOTable1.First;
 for i:=1 to ADOTable1.FieldCount-1 do
  begin
   str:=str+ADOTable1.Fields[i].AsString+#13
  end;
 ADOTable1.Last;
 for i:=1 to ADOTable1.FieldCount-1 do
  begin
   str1:=str1+ADOTable1.Fields[i].AsString+#13
  end;

 ADOTable1.First;
 ADOTable1.Edit;
 for i:=1 to ADOTable1.FieldCount-1 do
  begin
   ADOTable1.Fields[i].Value:=copy(str1,1,pos(#13,str1)-1); delete(str1,1,pos(#13,str1));
  end;
 ADOTable1.Post;

 ADOTable1.Last;
 ADOTable1.Edit;
 for i:=1 to ADOTable1.FieldCount-1 do
  begin
   ADOTable1.Fields[i].Value:=copy(str,1,pos(#13,str)-1);
   if(copy(str,1,pos(#13,str)-1)='')then ADOTable1.Fields[i].Value:='';
   delete(str,1,pos(#13,str));
  end;
 ADOTable1.Post;
end;
И смотри внимательно с автозаполняемыми полями, их поменять не получиться, будет ругаться Делфа.

А кому не понравился код, сделайте лутше, я тоже поучусь...
Нет невыполнимых задач, всё дело времени...
D-mon вне форума Ответить с цитированием
Старый 02.06.2008, 16:02   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Люди подскажите пожалуйста как в акцесовской базе данных на Delphi перенести допустим последнюю строчку на первое место
Ох некузявая идея...
Я в свое время так же сыкнулся, потом понял что вместо физических переносов нужно сделать поле идентификатора строки (автоинкремент подходил для этого идеально) потом просто менять этот ID местами, а отбор делать именно по этим ID. Создается впечатление переноса, но надежность повышается.
ИМХО, все поля записи вот так переносить не лучший вариант... А если там ченить типа МЕМО?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2008, 16:09   #4
Domovoy
Форумчанин
 
Регистрация: 24.10.2007
Сообщений: 254
По умолчанию

Играйся с первичным ключом
Вот небольшой пример:
Код:
create table #temp(id int primary key,name varchar(10))
go
insert into #temp values(1,'a')
insert into #temp values(2,'b')
insert into #temp values(3,'c')
go
select * from #temp
go
update #temp 
set id=(select max(id)+1 from #temp) 
where id=(select min(id) from #temp)
go
select * from #temp
Domovoy вне форума Ответить с цитированием
Старый 02.06.2008, 16:43   #5
One.Love
Пользователь
 
Регистрация: 13.01.2008
Сообщений: 91
По умолчанию

Код:
ADOTable1.Fields[i].Value:=copy(str1,1,pos(#13,str1)-1); delete(str1,1,pos(#13,str1));
на эту строчку ругается.
У меня поля: Позывной(числовой), машина(текстовый), номер(числовой) и статус(текстовый).

Domovoy
это SQL а мне надо Access (я с SQL ниразу не работал и не умею )
One.Love вне форума Ответить с цитированием
Старый 02.06.2008, 16:46   #6
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

Цитата:
Сообщение от One.Love Посмотреть сообщение
Код:
ADOTable1.Fields[i].Value:=copy(str1,1,pos(#13,str1)-1); delete(str1,1,pos(#13,str1));
на эту строчку ругается.
У меня поля: Позывной(числовой), машина(текстовый), номер(числовой) и статус(текстовый).
Что пишит??? У меня всё нормально отрабатывает... И тоже были разного формата и текстовые и числовые. Посмотри, я писал

И смотри внимательно с автозаполняемыми полями, их поменять не получиться, будет ругаться Делфа.
Нет невыполнимых задач, всё дело времени...
D-mon вне форума Ответить с цитированием
Старый 02.06.2008, 23:46   #7
One.Love
Пользователь
 
Регистрация: 13.01.2008
Сообщений: 91
По умолчанию

Я построил свой алгоритм перемещения вообще он выглядит так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOTable1 do
begin
First;
if ADOTable1.FieldByName('Статус').AsString='Свободен' then
begin
Edit;
FieldByName('Статус').AsString:='Заказ';
label1.Caption:=inttostr(FieldByName('Позывной').AsInteger);
label2.Caption:=FieldByName('Машина').AsString;
label3.Caption:=inttostr(FieldByName('Номер').AsInteger);
label4.Caption:=FieldByName('Статус').AsString;
Delete;
Append;
Insert;
FieldByName('Позывной').AsInteger:=strtoint(Label1.Caption);
FieldByName('Машина').AsString:=Label2.Caption;
FieldByName('Номер').AsInteger:=strtoint(Label3.Caption);
FieldByName('Статус').AsString:=Label4.Caption;
Post;
end else begin
if (ADOTable1.FieldByName('Статус').AsString='Занят') or (ADOTable1.FieldByName('Статус').AsString='Заказ') then
begin
Timer1.Enabled:=True;
end;
end;
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
with ADOTable1 do
begin
if (FieldByName('Статус').AsString='Свободен') then
begin
Edit;
FieldByName('Статус').AsString:='Заказ';
label1.Caption:=inttostr(FieldByName('Позывной').AsInteger);
label2.Caption:=FieldByName('Машина').AsString;
label3.Caption:=inttostr(FieldByName('Номер').AsInteger);
label4.Caption:=FieldByName('Статус').AsString;
Delete;
Append;
Insert;
FieldByName('Позывной').AsInteger:=strtoint(Label1.Caption);
FieldByName('Машина').AsString:=Label2.Caption;
FieldByName('Номер').AsInteger:=strtoint(Label3.Caption);
FieldByName('Статус').AsString:=Label4.Caption;
Post;
Timer1.Enabled:=False;
First;
end else begin
Next;
if (RecNo=RecordCount) and ((FieldByName('Статус').AsString='Занят') or (FieldByName('Статус').AsString='Заказ')) then
begin
Timer1.Enabled:=False;
First;
end;

end;
end;
end;
Но я буду переписывать все данные на переменные.
Не помню уже что писал, да и смотреть впринцыпе не буду уже, долго разбираться, посмотрел ваши предложения и вывел свою формулу решения проблемы. Кстате подскажите какой вариант лучше, удобней, компактней? Чтобы программа сильно не грузила ресурсы компьютера
One.Love вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с анимацией в ACCESS kuk132 Microsoft Office Access 1 17.07.2008 14:07
работа базы данных Access через интернет. Леонид Microsoft Office Access 6 27.05.2008 08:54
Access/ADO Anton_S БД в Delphi 2 26.05.2008 08:24
Delphy и Access.вводя инфу во вторичный файл Access, она отражалась в первом ADOTable Lev БД в Delphi 0 11.11.2007 12:14
Работа с БД Access Nowichok БД в Delphi 13 01.02.2007 00:27