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

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

Переименование строк в идексированной таблице


Shuric ©   (2003-03-26 21:26:00) 

Подскажите плиз наиболее рациональное решение задачи по переименованию нескольких строк в индексированной таблице.

Ключ по нулевому полю ("Наименование"). Придумал только:

function ChangeMatrizaElement(const OLDNameElement, NewNameElement: string): Wordbool;
var
AStroka: string;
Label 0;
begin
Result := True;
with TableMatriza do
if Active then begin
0: if Locate("Наименование", OLDNameElement, [loPartialKey]) then begin
AStroka := Fields[0].AsString;
if System.Pos(OLDNameElement, AStroka) = 1 then begin
System.Delete(AStroka, 1, length(OLDNameElement));
AStroka := NewNameElement + AStroka;
Edit;
Fields[0].AsString := AStroka;
try
Post;
except
on EDatabaseError do begin
Cancel;
Result := False;
end;
end;
if Result then goto 0;
end;
end;
end
else Result := False;
end;


Shuric   (2003-03-28 17:56:00) [1]

>sniknik ©

Старый добрый Paradox, и стандартный TTable. Индекса как какового нет, его роль - primary index

>GotoKey или GotoNearest - по идее таже констукция, а скорость мне не нужна, т.к. записей мало. Таблица есть по сути зеркало каталога базы данных. Вроде все.

Наверно кардинально не упростить, но всеравно огромное спасибо sniknik © ;)


Anatoly Podgoretsky   (2003-03-28 16:56:00) [2]

sniknik © (28.03.03 15:54)
Ты не умничай, ты скажи что делать


sniknik   (2003-03-28 15:54:00) [3]

именно отличаются, и не только запросы но и компоненты доступа к базам. почему и просят (постоянно) указывайте в вопросе полную информацию. (и постоянно игнорируется)

говориш таблица индексированна, а используеш Locate (по частичному значению индекс не используется).
почему не
GotoKey или GotoNearest? можно с уточняющей проверкой. раз индекс есть. или в твоих компонентах нет GotoNearest? тогда читай первую строку поста.


Shuric   (2003-03-28 15:26:00) [4]

>sniknik ©

Ладно - ладно, не умничай ;) Я в свое время собаками объелся (до сих пор изжога) на поприще запросов. Просто для разных баз они несколько отличаются, и моем случае многие типы не доступны.


sniknik   (2003-03-27 08:23:00) [5]

Shuric (26.03.03 23:43)
> И вооще у меня не ADO ;)
с чем вас и поздравляю.

> однако данная таблица у меня не оппровайдерна и редактируется только серверной частью (всегда открыта на запись).
но серверная часть есть, а SQL не используется, значит техногия файл сервер, нехорошо. SQL (сервера) в основном для того и придумали чтобы уйти от этого непрогрессивного и неэффективного метода (для серверных баз неэффективного, для локальных можно и таблицы открывать). а ты его так сразу отметаеш, открыть лишний раз таблицу видете ли лень. Открою небольшой секрет, ее вообше не нужно открывать, ни на запись ни на чтение, редактировать тоже запросами они разберутся как и когда ее отрывать закрывать.


Johnmen   (2003-03-27 00:45:00) [6]

Рекомендую к прочтению :
http://ln.com.ua/~openxs/articles/smart-questions-ru.html


Shuric   (2003-03-26 23:43:00) [7]

>sniknik ©

Ага, угу.
В некотором плане вы правы, однако данная таблица у меня не оппровайдерна и редактируется только серверной частью (всегда открыта на запись). А клиенты о ней не знают. А если запросами - то енто в каждой процедуре открыть, закрыть с различными SQL. И вооще у меня не ADO ;)


sniknik   (2003-03-26 22:50:00) [8]

можно запросом

AdoCommand.CommandText:=
"UPDATE TableMatriza SET [Наименование]="""+
NewNameElement+"""+Mid([Наименование], Len("""+OLDNameElement+""")+1) "+
"WHERE CompanyName LIKE """+OLDNameElement++"%""";
AdoCommand.Execute

ну как тут вполне справедливо заметили, какие компоненты использовать это я у тебя между строк прочитал (вернее между букв в нике), а база у вас точь в точь как у меня, и не отпирайся, все одно не поверю если будеш другое говорить. (сарказм, если не понятно)

зато решение САМОЕ рациональное!


Наверх

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