Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.52 MB
Время: 0.023 c
1-1089793797
Chas
2004-07-14 12:29
2004.08.01
Печать в дельфи (срочно)


14-1089880055
Warlock
2004-07-15 12:27
2004.08.01
Может кто сталкивался с IIS


14-1089665181
boband
2004-07-13 00:46
2004.08.01
Англоязычные сайты по Delphi


1-1090383199
Прямой
2004-07-21 08:13
2004.08.01
меню надо при нажатии на кнопку, лежащей на форме.


4-1087572404
Алексей Петухов
2004-06-18 19:26
2004.08.01
установить: разделитель разрядов, дробной части, даты и т.д.




   Наверх