![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пробежка по всей базе MS Access (mdb) [D7]
naum © (2004-11-07 14:33:00)Господа, помогите! С базами до сих пор не сталкивался. Стоит задачка: открыть базу данных MS Access (mdb) и преобразовать все(!) записи. Имена таблиц и кол-во записей предварительно неизвестны. Т.е. мне по сути надо пробежаться по всем данным меняя определенным образом содержимое каждой записи. Помогите! Лучше если на примере фрагмента исходного кода.
Nikolay M. (2004-11-08 11:17:00) [1]
> naum
Ты бы хоть в общем написал, что нужно, а то тебе советов накидают, а потом окажется, что тебе нужно совсем другое.
sniknik (2004-11-08 10:46:00) [2]ADOConnection1.GetFieldNames
пример OpenSchema можеш посмотреть в исходнике GetFieldNames (нажми Ctrl, подведи мышку на название метода и кликни, попадеш как раз куда нужно), там из всего только 1 поле используют, посмотри на все что возвращаются.
чтобы преобразования "зашить" в запрос, нужно более менее нормально sql знать,
JETSQL40.CHM справка по sql {есть или у тебя на машине если мсофис стоит или в его дистрибутиве иши}.
+ VBLR6.CHM справка по бейсику из того же офиса (многие из его функций можно использовать в запросе).
не извиняйся вопросы нормальные (лучше во всяком случае чем у некоторых любителей готового кода), а вот без подробного изучения, наскоком, ты вряд ли сделаеш нормально, это точно.
naum (2004-11-08 01:24:00) [3]Sniknik - вам спасибо огромное за моральную поддержку!
Все нижеследующие вопросы возникают лишь потому что надо очень быстро, а вникать очень долго. Заранее прошу прощение у всех Мастеров. Можно поподробнее относительно GetFieldNames - это метод какого компонента? Приведите пример использования OpenSchema, т.к. именно он мне и нужен - заглядывать надо в поля типа "строка". И еще - преобразования довольно таки сложные, т.е. сначало мне нужно получить значения - какой синтаксис будет SQL запроса? Еще раз прошу прощение за подобного рода вопросы :(
sniknik (2004-11-08 00:50:00) [4]> ... ADOTable1 ...
?
не слушай их, после будеш жаловаться что аксес тормозной...
поля можно получить через GetFieldNames
или (если нужны сведения о типах) то через OpenSchema
дальше составляеш запрос на изменение (UPDATE) нужные тебе изменения вносиш прямо в запрос (... SET MyField=MyField*2, ... ), дальше выполняеш в ADOCommand.
это будет в сотни раз быстрее манипуляций с ADOTable
naum (2004-11-08 00:48:00) [5]Сенькс. Буду копать в этом направлении.
PS. Простите что не сплясал ...(уходит за кулисы)
Плохиш (2004-11-08 00:32:00) [6]
> naum (08.11.04 00:10) [11]
Теперь читай про TTable.Fields
PS. Скушно-то как ...(зевает)
naum (2004-11-08 00:10:00) [7][9] Не могли бы немного подробнее? Просто я действительно блужу :(
naum (2004-11-08 00:08:00) [8]Я понимаю, что без почитать проблематично. Сижу читаю :) Просто очень внезапно встала задача... Только я не знаю имена полей... Ничего не знаю :( А надо бы пробежаться... Разобрался пока относительно:
TableList:=TStringList.Create;
ADOConnection1.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +FileName+';Persist Security Info=False';
ADOConnection1.Connected:=True;
ADOConnection1.GetTableNames(TableList);
for i:=0 to TableList.Count-1 do
begin
ADOTable1.TableName:=TableList[i];
ADOTable1.Open;
{А вот как по неизвестным мне полям бежать?}
end;
TableList.Free;
ADOConnection1.Connected:=False;
Nikolay M. (2004-11-08 00:04:00) [9]
> Hmm ©
Почитай про цикл WHILE. И про Persistent-поля, чтобы не давать безграмотных названий
> adotable1FIO - "полное имя"
и не вводить человека в заблуждение.
Hmm (2004-11-07 23:53:00) [10]хм, ну можно немного поменять алгоритм... главное суть.
хотя, конечно, без "почитать" врядли обойдется!
Плохиш (2004-11-07 23:53:00) [11][5]
Hmm (2004-11-07 23:47:00) [12]приношу извенения, вот правильный код:
procedure TForm1.Button1Click(Sender: TObject);
begin
adotable1.First;
repeat
adotable1.Edit;
adotable1FIO.text:='Иванов';
{где adotable1FIO - "полное имя" поля FIO}
adotable1.Post;
adotable1.next;
until adotable1.eof
end;
Плохиш (2004-11-07 23:42:00) [13]
> Hmm © (07.11.04 23:40) [4]
Ну да, особенно если набор данных пуст.
Hmm (2004-11-07 23:40:00) [14]насчет пробежаться по всем записям - эт просто:
adotable1.First;
repeat
..........
изменение данных, например
adotable1FIO.text:='Иванов';
{где adotable1FIO - "полное имя" поля FIO}
..........
adotable1.next;
until adotable1.eof;
Плохиш (2004-11-07 23:33:00) [15]
> naum (07.11.04 23:18) [2]
Может для начала всё-таки чего-нибуть почитаешь?
naum (2004-11-07 23:18:00) [16]Вообще я в базах не бум-бум. Имена таблиц как понимаю моно методом GetTablesName? Как мне пробежаться по полям в таблице (уже после открытия) и изменить их значение определенным образом? К тому же значения надо менять только в полях типа "строка" - как узнать тип поля?
YurikGL (2004-11-07 15:04:00) [17]Берешь адоконнекшн, подсоединяешь к базе, выясняешь, какие там есть таблицы, открываешь их по очереди и делаешь необходимые действия.
Если возникнут проблемы на одном из шагов - пиши, какая проблема и на каком шаге.