Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизПробежка по всей базе MS Access (mdb) Найти похожие ветки
← →
naum (2004-11-07 14:33) [0]Господа, помогите! С базами до сих пор не сталкивался. Стоит задачка: открыть базу данных MS Access (mdb) и преобразовать все(!) записи. Имена таблиц и кол-во записей предварительно неизвестны. Т.е. мне по сути надо пробежаться по всем данным меняя определенным образом содержимое каждой записи. Помогите! Лучше если на примере фрагмента исходного кода.
← →
YurikGL © (2004-11-07 15:04) [1]Берешь адоконнекшн, подсоединяешь к базе, выясняешь, какие там есть таблицы, открываешь их по очереди и делаешь необходимые действия.
Если возникнут проблемы на одном из шагов - пиши, какая проблема и на каком шаге.
← →
naum (2004-11-07 23:18) [2]Вообще я в базах не бум-бум. Имена таблиц как понимаю моно методом GetTablesName? Как мне пробежаться по полям в таблице (уже после открытия) и изменить их значение определенным образом? К тому же значения надо менять только в полях типа "строка" - как узнать тип поля?
← →
Плохиш © (2004-11-07 23:33) [3]
> naum (07.11.04 23:18) [2]
Может для начала всё-таки чего-нибуть почитаешь?
← →
Hmm © (2004-11-07 23:40) [4]насчет пробежаться по всем записям - эт просто:
adotable1.First;
repeat
..........
изменение данных, например
adotable1FIO.text:="Иванов";
{где adotable1FIO - "полное имя" поля FIO}
..........
adotable1.next;
until adotable1.eof;
← →
Плохиш © (2004-11-07 23:42) [5]
> Hmm © (07.11.04 23:40) [4]
Ну да, особенно если набор данных пуст.
← →
Hmm © (2004-11-07 23:47) [6]приношу извенения, вот правильный код:
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:53) [7][5]
← →
Hmm © (2004-11-07 23:53) [8]хм, ну можно немного поменять алгоритм... главное суть.
хотя, конечно, без "почитать" врядли обойдется!
← →
Nikolay M. © (2004-11-08 00:04) [9]
> Hmm ©
Почитай про цикл WHILE. И про Persistent-поля, чтобы не давать безграмотных названий
> adotable1FIO - "полное имя"
и не вводить человека в заблуждение.
← →
naum (2004-11-08 00:08) [10]Я понимаю, что без почитать проблематично. Сижу читаю :) Просто очень внезапно встала задача... Только я не знаю имена полей... Ничего не знаю :( А надо бы пробежаться... Разобрался пока относительно:
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;
← →
naum (2004-11-08 00:10) [11][9] Не могли бы немного подробнее? Просто я действительно блужу :(
← →
Плохиш © (2004-11-08 00:32) [12]
> naum (08.11.04 00:10) [11]
Теперь читай про TTable.Fields
PS. Скушно-то как ...(зевает)
← →
naum (2004-11-08 00:48) [13]Сенькс. Буду копать в этом направлении.
PS. Простите что не сплясал ...(уходит за кулисы)
← →
sniknik © (2004-11-08 00:50) [14]> ... ADOTable1 ...
?
не слушай их, после будеш жаловаться что аксес тормозной...
поля можно получить через GetFieldNames
или (если нужны сведения о типах) то через OpenSchema
дальше составляеш запрос на изменение (UPDATE) нужные тебе изменения вносиш прямо в запрос (... SET MyField=MyField*2, ... ), дальше выполняеш в ADOCommand.
это будет в сотни раз быстрее манипуляций с ADOTable
← →
naum (2004-11-08 01:24) [15]Sniknik - вам спасибо огромное за моральную поддержку!
Все нижеследующие вопросы возникают лишь потому что надо очень быстро, а вникать очень долго. Заранее прошу прощение у всех Мастеров. Можно поподробнее относительно GetFieldNames - это метод какого компонента? Приведите пример использования OpenSchema, т.к. именно он мне и нужен - заглядывать надо в поля типа "строка". И еще - преобразования довольно таки сложные, т.е. сначало мне нужно получить значения - какой синтаксис будет SQL запроса? Еще раз прошу прощение за подобного рода вопросы :(
← →
sniknik © (2004-11-08 10:46) [16]ADOConnection1.GetFieldNames
пример OpenSchema можеш посмотреть в исходнике GetFieldNames (нажми Ctrl, подведи мышку на название метода и кликни, попадеш как раз куда нужно), там из всего только 1 поле используют, посмотри на все что возвращаются.
чтобы преобразования "зашить" в запрос, нужно более менее нормально sql знать,
JETSQL40.CHM справка по sql {есть или у тебя на машине если мсофис стоит или в его дистрибутиве иши}.
+ VBLR6.CHM справка по бейсику из того же офиса (многие из его функций можно использовать в запросе).
не извиняйся вопросы нормальные (лучше во всяком случае чем у некоторых любителей готового кода), а вот без подробного изучения, наскоком, ты вряд ли сделаеш нормально, это точно.
← →
Nikolay M. © (2004-11-08 11:17) [17]
> naum
Ты бы хоть в общем написал, что нужно, а то тебе советов накидают, а потом окажется, что тебе нужно совсем другое.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.03 c