Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.01;
Скачать: CL | DM;

Вниз

вставка 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.038 c
8-1084424185
PleaseHelpME
2004-05-13 08:56
2004.08.01
Background у Formы


8-1084786659
rand0m
2004-05-17 13:37
2004.08.01
Панорама космоса


9-1081017289
BAPBAP
2004-04-03 22:34
2004.08.01
Последняя версия GLScene?


14-1089626083
Piter
2004-07-12 13:54
2004.08.01
А кто на какие сайты постоянно заходит?


10-1017407995
Dmitry Borisovets
2002-03-29 16:19
2004.08.01
void в idl





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский