Текущий архив: 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