Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.04.2009, 11:53
alexnov alexnov вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
Вопрос Как лучше организовать БД компов в локальной сети

Привет всем! Вот все никак недотумкаю, как лучше мне организовать такое дело: я пишу прогу клиент-сервер, клиент стоит на всех компах в сети и запускается при старте винды, а сервер у "начальника отдела ИТ". Это моя прога на диплом и предназначена она для автоматизации инвентаризации компов в сети предприятия.
При старте программы-сервера сеть сканируется на включенные компы и список компов в виде TreeView заполняется. При нажатии правой кнопкой мыши по компу в TreeView и выборе из выпадающего меню "Получить конф-ю компа", сервер получает от клиента текст с описанием железа компа, которое кладется пока просто в МЕМО. Как бы лучше организовать хранение этой инфы в БД, как заносить компы в БД??? Использовать планирую БД Access *.mdb + ADO. Подскажите пожалуйста, как лучше это реализовать!

Последний раз редактировалось alexnov, 16.04.2009 в 12:00.
Ответить с цитированием
  #2  
Старый 16.04.2009, 12:19
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от alexnov
...как заносить компы в БД??? Использовать планирую БД Access *.mdb + ADO. Подскажите пожалуйста, как лучше это реализовать!

Ну, создай таблицу в базе, поля с соответствующими к конфигурации компов названиями (типа CPU, RAM, OS и прочее), еще пару полей-идентификаторов для определения компа в сети (IP, Network_name, Net_User и др.). Ну и все, получаешь список компов, перебираешь его и смотришь есть такой уже в базе или нет. Если нет- получаешь конфигурацию, и раскидываешь ее по таблице.
Ответить с цитированием
  #3  
Старый 16.04.2009, 13:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вообщето ответ зависит от того, что планируется делать с этими данными. Если они нужны в виде текстового представления, то "нафига козе боян". А вот если вы хотите делать какие-то выборки по составляющим этот список элементам - тогда конечно придется раскладывать по компонентам в таблицы.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 16.04.2009, 14:27
alexnov alexnov вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
По умолчанию

конечно, выборки предполагаются. Как я себе представляю, когда при запуске программы происходит сканирование сети на наличие включенных компов нужно их сразу добавлять в таблицу (с проверкой на наличие его уже там), а потом при опросе отдельного компа нужно искать его в этой таблице и заполнять необходимое поле. так вроде?
Ответить с цитированием
  #5  
Старый 21.04.2009, 12:10
alexnov alexnov вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
По умолчанию

Ребята как написать процедуру эту добавления компа в таблицу ADOTable_Comps не пойму???

Код:
procedure Add_pc_to_db(comp_name:string);
var i:integer;
begin
for i:=0 to DataModule1.ADOTable_Comps.RecordCount do
if  DataModule1.ADOTable_Comps.FieldValues['compname'].asstring<>comp_name then
                  DataModule1.ADOTable_Comps.FieldValues['compname'].asstring:=comp_name;

if DataModule1.ADOTable_Comps.Modified=true then DataModule1.ADOTable_Comps.Post;
end;

lmikle: пользуемся тегами!!!

Последний раз редактировалось alexnov, 21.04.2009 в 12:15.
Ответить с цитированием
  #6  
Старый 21.04.2009, 12:51
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Жэсть какая- то...

Шоб добавить запись надо использовать Insert, перед этим можно проверить на существование такой записи при помощи Locate.

напиши лучше словами что именно ты хочешь сделать своей процедурой, бо та что ты написал, делает почти ничего
Ответить с цитированием
  #7  
Старый 21.04.2009, 12:55
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ой, мама дорогая...
Ну ты хоть в папочку Demos залез бы. Посмотрел бы как работать с компонентами доступа к данным.

Код:
procedure AddPC(AName : String);
begin
  DataModule1.ADOTable_Comps.First;
  While Not DataModule1.ADOTable_Comps.EOF Do
    Begin
      If DataModule1.ADOTable_Comps.FieldByName('compname').AsString = AName Then Exit;
      DataModule1.ADOTable_Comps.Next;
    End;
  DataModule1.ADOTable_Comps.Append;
  DataModule1.ADOTable_Comps.FieldByName('compname').AsString := AName;
  DataModule1.ADOTable_Comps.Post;
end;

Грубо, без дополнительных проверок и т.д., но идея должна быть понятна.
Ответить с цитированием
  #8  
Старый 22.04.2009, 10:01
alexnov alexnov вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
По умолчанию

Спасибо за помощь, понял вроде. В базу добавляет, но тут еще не пойму аочему при выполнении следующего кода у меня остальные поля заполняются не в найденной записи а в новой в конце таблицы?!!?

Цитата:
procedure add_hard_info_to_db(AName:string; ip:string; text:string); //добавление информации о пк в базу
begin
DataModule1.ADOTable_Comps.First;
if (DataModule1.ADOTable_Comps.Locate('compname',ANam e,[]))=false then
ShowMessage('Ошибка! Компьютер с именем '+AName+ ' не найден в БД!')
else
begin
ShowMessage('Компьютер с именем '+AName+ ' найден в БД!');
DataModule1.ADOTable_Comps.Append;
DataModule1.ADOTable_Comps.FieldByName('ip_ad').As String := ip;
DataModule1.ADOTable_Comps.FieldByName('monitor'). AsString := text;
DataModule1.ADOTable_Comps.Post;
end;

end;

Последний раз редактировалось alexnov, 22.04.2009 в 10:46.
Ответить с цитированием
  #9  
Старый 22.04.2009, 10:15
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Потому-что:
Код:
DataModule1.ADOTable_Comps.Append;
Хотя вообще-то по логике если не найдено. Проверьте код, действительно у вас он находит?
И еще, так писать
Код:
if (DataModule1.ADOTable_Comps.Locate('compname',ANam e,[]))=false then
нехорошо, лучше так:
Код:
if not DataModule1.ADOTable_Comps.Locate('compname',AName,[]) then
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 22.04.2009 в 10:22.
Ответить с цитированием
  #10  
Старый 22.04.2009, 10:44
alexnov alexnov вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
По умолчанию

а что с
Цитата:
DataModule1.ADOTable_Comps.Append;
не так?
Проверил код в работе, пишет что нашел!
Ответить с цитированием
  #11  
Старый 22.04.2009, 10:46
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

DataModule1.ADOTable_Comps.Append; - Это я так, поток сознания - не обращайте внимания.

Попробуйте отладчиком по шагам пройтись и посмотреть, что происходит.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 22.04.2009, 12:19
alexnov alexnov вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
По умолчанию

смотрел отладчиком, находит запись, но как проверить в ту ли запись он пишет? то есть означает ли что DataModule1.ADOTable_Comps.FieldByName('monitor'). AsString := text; это запись в найденную locatе'ом запись?
Ответить с цитированием
  #13  
Старый 22.04.2009, 12:39
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

777777777777777777777
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 22.04.2009, 12:56
alexnov alexnov вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 33
Репутация: 10
По умолчанию

ну то есть не понятно курсор почему сбивается с найденной записи и пишет в конец таблицы в новую строку!
Ответить с цитированием
  #15  
Старый 22.04.2009, 13:23
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Насколько мне известно Append равносилен Insert, поэтому в конце и добавляется новая запись. Используй Edit для изменения текущей записи
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter