Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Вниз

вставка Id поля вместо значения   Найти похожие ветки 

 
Vova   (2004-07-05 10:03) [0]

Подскажите как организовать запись в базу даних , єсть четире таблици ( Microsoft Access) , нужно програмним путєм записать в основную таблиу значениє Id полей трьох таблиц (визуальной аналог DBLookupComboBox), причем єсли такова значениє ненайдено в таблице то добавить новиє поле с етим значениєм да записать Id етова поля в основною талицу. Нужно бистродействующій алгоритм, я пробивал писать но очень долго работаєт:
1.Сначала через Table1.Locate() делал поиск в таблице 1 єсли ничево ненашло добавлял значениє.
2.потом опять  Table1.Locate() опредилял значениє Id и записивал єто Id в основною таблицу, и так проход делаєтса по 3 таблицам, подскажите как упрастит ето!!!!!!!!!!!11


 
Соловьев ©   (2004-07-05 10:10) [1]

Мастер-детайл?
TADOTable.MasterSource+F1


 
Курдль ©   (2004-07-05 10:16) [2]

А с какой целью вся эта суета?
Если Lookup, то оно и само все расставит, как надо.
Тут наверное импорт данных из внешнего файла (тогда быстрее, чем locate сделать будет трудно).
Однако, немного задалбывает додумывать за автора, "что же он хотел спросить?"


 
Vova   (2004-07-05 11:01) [3]

трудно обяснит но ето именно импорт , так што я понял надо делать как делал!!! Буду рад услишат єщо совети!!!!!


 
Erik1   (2004-07-05 11:09) [4]

Запоминай в переменую и увеличивай ее на еденицу при каждом добавлении записи.


 
Курдль ©   (2004-07-05 11:25) [5]


> Vova   (05.07.04 11:01) [3]
> трудно обяснит но ето именно импорт , так што я понял надо
> делать как делал!!! Буду рад услишат єщо совети!!!!!


Если Вы уверены, что в импортируемых данных нет повторяющихся значений, то можно искать не с помощью locate в наборе данных, имеющимся на клиенте, а запросом к СУБД.

Помню как-то давно была нужда импорта юридических и физических лиц из файла Excel.

Name  |Address |   Passport  |      Account
---------------------------------------------------
Smith | Moscow | 23 04 56578 | 40702810500000000123


В базе была таблица субъектов, а с ней связаны "многие-к-одному" таблицы паспортов, адресов и счетов.
Тогда в цикле исследовалась каждая запись импортируемого файла на предмет нахождения Name в БД простым запросом
select SBJ_ID from SUBJECTS where SBJ_NAME = :SBJ_NAME
Если субъект находился по имени, то в подчиненные таблицы добавлялся SBJ_ID, если не находился - добавлялась запись в таблицу SUBJECTS и уже новое значение SBJ_ID заносилось в подчиненные таблицы.
Что парадоксально - такой подход работал быстрее, чем locate.


 
vova   (2004-07-07 09:44) [6]

задача изменилась чучуть, тепер ето не импорт, server принимаєт от клиєнта структуру даних
dani:record;
host:string[50];
user:string[20];
ip:string[16];
....
end;
на server нужно записат в log.mdb єту структуру в четире таблици
1 таблица пишет ID host,id user, id Ip,........
2 таблица два поля id и host
3 таблица два поля id и user
4 таблица два поля id и ip
Ножно бистро записать запись dani в таблицу причом єсли в какой нибуть из таблиц 2,3,4 нет значениє то добавить и записать id етого поля в таблицу 1.
Подкинте пример кода, я использую компонети ADO для доступу к базе!!!!


 
Соловьев ©   (2004-07-07 10:02) [7]


> Подкинте пример кода, я использую компонети ADO для доступу
> к базе!!!!

скоко у.е.?


 
vova   (2004-07-07 10:33) [8]

как понимать скоко у.е.? (для непродвинутих)


 
Соловьев ©   (2004-07-07 10:35) [9]


> как понимать скоко у.е.? (для непродвинутих)

если лень самому, то тебе напишут за мани :)

и кстати, http://delphimaster.net/view/3-1089179265/&web=1


 
Курдль ©   (2004-07-07 10:40) [10]


> Соловьев ©   (07.07.04 10:35) [9]
>
> > как понимать скоко у.е.? (для непродвинутих)
>
> если лень самому, то тебе напишут за мани :)


как понимать (для непродвинутих)"за мани"?
(Надеюсь, что ветку прибьют модераторы) :)


 
sniknik ©   (2004-07-07 10:49) [11]

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


 
vova   (2004-07-07 11:06) [12]

могу дать кучу компонентов на любой вкус!!!!


 
Курдль ©   (2004-07-07 11:10) [13]


> vova   (07.07.04 11:06) [12]
> могу дать кучу компонентов на любой вкус!!!!

Ура!!! Хочу "Extra Grid 5" от "Developer Express" для VS.NET!


 
vova   (2004-07-07 11:17) [14]

єсть похожая
EhLib history

Version 2.5

 + Added Delphi 7 support.

 + New units: CalculatorEh - TCalculatorEh, TPopupCalculatorEh
              DbUtilsEh - Utilities to sort data in DataSet from DBGrid
              EhLibADO - Register object that sort data in TADOQuery
              EhLibBDE - Register object that sort data in TQuery
              EhLibCDS - Register object that sort data in TCustomClientDa

Очень навороченая


 
Соловьев ©   (2004-07-07 11:19) [15]


> Version 2.5

уже есть 3.3, еще более навороченная:)


 
vova   (2004-07-07 11:19) [16]

короче єсть два диска компонентов один для баз второй для интернету и т.п.


 
Соловьев ©   (2004-07-07 11:20) [17]

чем тебя http://delphimaster.net/view/3-1089179265/&web=1 не устроил?


 
vova   (2004-07-07 11:23) [18]

ну ладно та помогите пожалиста пример а там уже проще


 
Соловьев ©   (2004-07-07 11:23) [19]


> ну ладно та помогите пожалиста пример а там уже проще

без проблем, что не получается?


 
vova   (2004-07-07 11:51) [20]

неполучаєтса огранизовать запись
на server нужно записат в log.mdb єту структуру в четире таблици
1 таблица пишет ID host,id user, id Ip,........
2 таблица два поля id и host
3 таблица два поля id и user
4 таблица два поля id и ip
Ножно бистро записать запись dani в таблицу причом єсли в какой нибуть из таблиц 2,3,4 нет значениє то добавить и записать id етого поля в таблицу 1.


 
vova   (2004-07-07 11:53) [21]

подкинте реальной алгоритм а вчера из сервисом провозилса целий день а тепер ищо з базой день , то наето уйдєт месяц


 
VOVA   (2004-07-07 13:08) [22]

Люди добриє помогите!!!!!!!!!


 
Соловьев ©   (2004-07-07 13:19) [23]

в чем конкретно запарка? с алгоритмом тебе не помогут. реши сам, покажи как решил, а тут уже покритикуют.


 
VOVA   (2004-07-07 13:42) [24]

я так наброску зделал:
1.Сначала через Table1.Locate() делалаю поиск в таблице 2,3,4 єсли ничево ненашло добавлял значениє.
2.потом опять  Table1.Locate() опредиляю значениє Id и записую в таблицу 1.
НО мне кажетса щто так оно медлено будет работать, бо пакети валят сразу з 20 компов просто будет неуспевать обработать. я уже подумал может чере поток пустить.
И мне кажется через ADOQuery оно должно бистреє  чем ADOTable1, да от SQL учит то времени нет!!!!


 
Курдль ©   (2004-07-07 13:49) [25]


> VOVA   (07.07.04 13:08) [22]
> Люди добриє помогите!!!!!!!!!

Еще вариант - опиши кратко бизнес-процесс. Чего-там за 20-ю компами делается и что получить-то надо!


 
bushmen ©   (2004-07-07 13:59) [26]

> да от SQL учит то времени нет!!!!

Интересно, а зарплату свою ты нам будешь перечислять? :))


 
VOVA   (2004-07-07 14:11) [27]

Блин ви думаєте за це мени заплятять, ага дождуся,я для себе пишу взагалито а на продажу писати не той ривень ще в мене, в мене в сети тонер кудись диваєтся банками , а от проследить хотелося кто и што печатаєт, а з 20 копов идет dani:record .....; от их хочу рписать в базу. Я уже тут нашол куча софта но мне не подходит, думал кинуть писать когда мучалса з сивисом, но запустил всьотаки тепер в базу писать знов муцениє, а потом ищо хотел добавить ограницениє копий пользователям но там зноа с API возитса тамболиє из под сервиса. пока нипишу то весь запас тонера удєт.
От коротко о проблеме!!


 
VOVA   (2004-07-07 15:00) [28]

procedure TForm1.Button1Click(Sender: TObject);
var
id1,id2,id3:integer;
begin
if not printers.Locate("printer",Edit1.Text,[loCaseInsensitive])
  then
  begin
  printers.Insert;
  printers.FieldValues["printer"]:=Edit1.Text;
  printers.Post;
  id1:=printers.FieldValues["id"];
  end else  id1:=printers.FieldValues["id"];

if not host.Locate("host",Edit2.Text,[loCaseInsensitive])
  then
  begin
  host.Insert;
  host.FieldValues["host"]:=Edit2.Text;
  host.Post;
  id2:=host.FieldValues["id"];
  end else   id2:=host.FieldValues["id"];

if not users.Locate("user",Edit3.Text,[loCaseInsensitive])
  then
  begin
  users.Insert;
  users.FieldValues["user"]:=Edit3.Text;
  users.Post;
  id3:=users.FieldValues["id"];
  end else   id3:=users.FieldValues["id"];

  Log.Insert;
  log.FieldValues["printer"]:=id1;
  log.FieldValues["host"]:=id2;
  log.FieldValues["user"]:=id3;
  log.FieldValues["tip"]:=Edit4.Text;
  log.FieldValues["name"]:=Edit5.Text;
  log.FieldValues["page"]:=strtoint(Edit6.Text);
  log.Post;
end;

вот що я набрасал работаєт но неуверен што будет успевать!!!!!!!!1


 
WWW   (2004-07-07 19:50) [29]

Це що вже кінцевий варіант оптимізації ??????????????????
Всі якісь жлоби тільки про бабки думають !!!!!!!!!!!!!!


 
sniknik ©   (2004-07-07 20:46) [30]

за бабки - быстро и под "ключ", кінцевий вариант на руки.
бесплатно - медленно, на общей основе - вы делаете, мы помогаем с проблемами (если сами знаем).

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.08.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.032 c
1-1089850879
Gleb
2004-07-15 04:21
2004.08.01
Программный поиск файлов


14-1089291333
DimKa
2004-07-08 16:55
2004.08.01
В какое время вы чаще бываете на данном сайте?


1-1090243616
Aleksandr.
2004-07-19 17:26
2004.08.01
Как узнать размеры TRadioGroup, нужные для отображения итемов?


14-1089619301
Alone
2004-07-12 12:01
2004.08.01
Красота по Американски


4-1087896930
Davinchi
2004-06-22 13:35
2004.08.01
Чтение/запись свойств Word документа челез ОЛЕ линки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский