Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 21:00 12.07.25 
Компютри и Интернет
   >> Delphi
*Кратък преглед

Страници по тази тема: 1 | 2 | (покажи всички)
Тема InsertSQLнови  
Автор kalinkina (начинаеща)
Публикувано31.01.08 15:53



Привет на всички,
защо би могло да се случва следното:

поставям във форма едно DBISAMUpdateSQL и там на InsertSQL имам

INSERT INTO табле1 (поле1, поле2, поле3, .... полеЕН)
SELECT поле1, поле2, поле3, .... полеЕН
FROM табле2

слагам един бутон, който на клик да прави
NewUpdateSQL.ExecSQL(ukInsert);

И когато го кликам бутона, казва "DBISAM error #11010 table or backup TABLE2 does not exist"
Правих repair, verify на таблицата, на ново я създавах и все същото .....

Има ли друго осен ExecSQL, което се прави за да се изпълни SQLa?

---
(на)здраве и късмет


Тема Re: InsertSQLнови [re: kalinkina]  
Автор vido (минаващ)
Публикувано02.02.08 06:45



Така като гледам, повечето хора не са работили с това чудо DBISAM.
Така че най- добре http://www.elevatesoft.com/support.htm
Освен това е платено, така че тяхната поддръжка трябва да помогне.



Тема Re: InsertSQLнови [re: kalinkina]  
Авторkalinkina (Нерегистриран)
Публикувано04.02.08 12:54



Открих го с проба-грешка :)
Оказа се, че на табле1 и табле2 трябва да му кажа физически къде се намират "С:\еди_къде_си\табле1 ......"



Тема какъв по-елегантен начин иманови [re: vido]  
Авторkaлиkинa (Нерегистриран)
Публикувано12.02.08 12:20



Пак съм аз с този InsertSQL .....


Имам едно множество (Таблица-А) и подмножество(Таблица-Б), трябва да получа разликата
Правя Query1 за да получа всички записи от Б, съдържащи се в А по поле-Х
Правя Query2 за да получа всички записи от Б, но не се съдържат в А по поле-Х
Възможно е да има дублирани записи и Query1 връща по-малко записи
За да ги намеря правя таблици от Query1 и Query2 (там слагам флаг ('1' ако е от табл1, '0' ако е от табл2)
после ще обединя табле1 и табле2 (резултата ще е равен на Табле-А) и после ще сетвам флага ръчно

with DataModule1.Query1 do
begin
Active:=false;
Active:=true;
SaveToTable('алабала','табле1');
end;
with DataModule1.Query2 do
begin
Active:=false;
Active:=true;
SaveToTable('алабала','табле2');
end;

INSERT INTO "алабала\табле1" (поле1,поле2,поле3)
SELECT поле1,поле2,поле3
FROM "алабала\табле2"

Получавам грешка "Update failed "

Предполагам този SaveToTable ми обърква нещата, защото имам поле, което е AutoIncrement в Таблица-А и Таблица-Б .....
Или след SaveToTable таблицата ми остава в заключен режим ?!?!

........ Нещо бъркам и не ми е ясно къде
Може ли някой да ми даде идея как да стигна до НовТабл=ТаблеА-ТаблеБ, така че и дублираните записи да са там .....



Тема Re: какъв по-елегантен начин иманови [re: kaлиkинa]  
Автор vido (минаващ)
Публикувано12.02.08 20:54



select field1, field2, field3 from table1
MINUS
select field1, field2, field3 from table2

но това може и да не работи на този специфичен DB сървар. Друг е въпроса че не разбрах какво точно искаш. Това връща всички записи от таблица1 които ги няма в таблица2. Записите които ги има и в двете таблици няма да са в резултата. Нещо не се вързва с "...така че и дублираните записи да са там ....."



Тема Re: какъв по-елегантен начин има [re: vido]  
Авторkalinkina (Нерегистриран)
Публикувано13.02.08 11:46



Всъщност точно това искам - да връща всички записи от таблица1 които ги няма в таблица2
Понеже понякога има дублиране на записи, моите quey-та не ги взимат под внимание и затова прибегнах към цялата гимнстика ;)

Май това с "MINUS"-а наистина го няма в ДБИСАМа ..... ще прочета повече, може да има друг метод



Тема Re: какъв по-елегантен начин иманови [re: kalinkina]  
Автор Formal (незнаещ)
Публикувано13.02.08 17:16



Може да използваш такова query, което да ти върне разликата (но трябва да нямаш nulls във t2.field1):

select t1.field1, t1.field2, t1.field3
from t1
left join t2 on (t1.field1 = t2.field1 and t1.field2 = t2.field2 and t1.field3 = t2.field3)
where t2.field1 is null

Редактирано от Formal на 13.02.08 17:17.



Тема Re: какъв по-елегантен начин иманови [re: Formal]  
Авторkalinkina (Нерегистриран)
Публикувано13.02.08 21:06



Аз точно това съм направила, но резултата не винаги е реален, заради дублиращи суми

SELECT NwS.id, NwS.idstat, NwS.StDate, NwS.pay, NwS.ibancust, NwS.line
FROM NwS LEFT JOIN NwA ON (NwS.ibancust = NwA.ibancust) AND (NwS.pay = NwA.pay)
WHERE (((NwA.pay) Is Null) AND ((NwA.ibancust) Is Null));

после добавям едно поле, в което сетвам флаг в '1' и правя временна
таблица и пускам още едно query с инверт на условието
WHERE (((NwA.pay) Is Null) AND ((NwA.ibancust) Is Not Null));
от което правя друга временна таблица със сетнат флаг '0' на всеки запис
Искам да ги залепя двете таблици (резултата ще е същия като ТаблицаА, но
със флагове на всеки рекорд) и после ръчно ще сетвам записите, които
първото query не е прихванало .........

но нещо не ми върви InsertSQL-a





Тема НАМЕРИХ РЕШЕНИЕТОнови [re: Formal]  
Авторkalinkina (Нерегистриран)
Публикувано14.02.08 10:34



Ееееей, голяма съм калинка! Знаех си, че ще излезе нещо елементарно!!!!!

Та порових в DBISAMa и намерих аналога на MINUS, казвa се EXCEPT
Но в крайна сметка след като създам временните таблици употребих UNION
и така ги залепих резултатите от двете query-taaaaaa





Тема Re: какъв по-елегантен начин иманови [re: kalinkina]  
Автор Formal (незнаещ)
Публикувано14.02.08 14:58



Нещо пак не разбрах, ето един експеримент:


create table __at1 (id int, f1 int, f2 int)
create table __at2 (id int, f1 int, f2 int)
insert into __at1 values (1, 1, 1)
insert into __at1 values (2, 1, 2)
insert into __at1 values (3, 1, 3)
insert into __at1 values (4, 2, 1)
insert into __at1 values (5, 2, 2)
insert into __at1 values (6, 2, 3)
insert into __at1 values (7, 3, 1)
insert into __at1 values (8, 3, 2)
insert into __at1 values (9, 3, 3)

insert into __at2 values (11, 1, 1)
insert into __at2 values (12, 1, 2)
insert into __at2 values (13, 1, 4)
insert into __at2 values (14, 2, 1)
insert into __at2 values (15, 2, 2)
insert into __at2 values (16, 2, 4)
insert into __at2 values (17, 4, 1)
insert into __at2 values (18, 4, 2)
insert into __at2 values (19, 4, 4)

select __at1.id, __at1.f1, __at1.f2
from __at1
left join __at2 on (__at1.f1 = __at2.f1 and __at1.f2 = __at2.f2)
where __at2.f1 is null and __at2.f2 is null

Има дублиращи се по f1, по f2, както и по двете.
Резултатът, както може да се очаква, е:

id f1 f2
----------- ----------- -----------
3 1 3
6 2 3
7 3 1
8 3 2
9 3 3

(5 row(s) affected)

Сега, ако изпълня същата заявка, но със сменено условие:

select __at1.id, __at1.f1, __at1.f2
from __at1
left join __at2 on (__at1.f1 = __at2.f1 and __at1.f2 = __at2.f2)
where __at2.f1 is null and __at2.f2 is not null

Резултатът, както може да се очаква, е:

id f1 f2
----------- ----------- -----------

(0 row(s) affected)

Не съм много сигурен как може да се получи резултат във втория случай.

Но както и да е, щом проблема е вече решен...

Редактирано от Formal на 14.02.08 15:00.




Страници по тази тема: 1 | 2 | (покажи всички)
*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.