Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизКак записать в таблицу ЭТО? Найти похожие ветки
← →
ViktorZ © (2006-03-01 16:19) [0]T41.SQL.Text:="SELECT C.Card, SUM(AR.Qnt*AR.RealPrice)
FROM CARDS C, ARcheck AR, Menu M, ACheck A, ADCheck AD
WHERE
(A.Sys_Num=AD.Sys_Num)
AND (M.Categ=:P1)
AND (AD.SIFR=:P2)
AND (AD.Sys_Num=AR.Sys_Num)
AND (AR.Sifr=M.Sifr)
AND (C.CARD=AD.CardCod)
AND (A.LogicDAte Between :P3 AND :P4)
GROUP BY C.Card";
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.Open;
База PARADOX.
← →
Sergey13 © (2006-03-01 16:27) [1]>Как записать в таблицу ЭТО?
Что ЭТО? Текст программы? Результат запроса? Что?
← →
ViktorZ © (2006-03-01 16:30) [2]Результат запроса.
← →
Sergey13 © (2006-03-01 16:36) [3]2[2] ViktorZ © (01.03.06 16:30)
Перепиши его (запрос) с конструкцией INSERT INTO NEW_TABLE_NAME впереди и выполни (не открывай).
← →
ViktorZ © (2006-03-01 17:00) [4]T41.SQL.Text:="INSERT INTO TOTAL SELECT C.Card, SUM(AR.Qnt*AR.RealPrice) FROM CARDS C, ARcheck AR, "+
" Menu M, ACheck A, ADCheck AD WHERE (A.Sys_Num=AD.Sys_Num) "+
" AND (M.Categ=:P1) AND (AD.SIFR=:P2) AND (AD.Sys_Num=AR.Sys_Num) AND "+
" (AR.Sifr=M.Sifr) AND (C.CARD=AD.CardCod) AND (A.LogicDAte BETWEEN :P3 AND :P4) "+
" GROUP BY C.Card";
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.ExecSQL;
ТАк? Не работает. Пишет Invalid Parameter. Хотя что неверного то? Просто с Селектом работает.
← →
ViktorZ © (2006-03-01 17:05) [5]INSERT INTO TOTAL(CARD,SUMMA) здесь ведь должно быть столько же параметров сколько и в селекте? я и так пробовал.Все равно не пашет. Мож как то прям из грида можно запихать в таблицу.
← →
Sergey13 © (2006-03-01 17:11) [6]INSERT INTO TOTAL(CARD,SUMMA)
SELECT C.Card,SUM(AR.Qnt*AR.RealPrice) as SUMMA
попробуй
[5] ViktorZ © (01.03.06 17:05)
> Мож как то прям из грида можно запихать в таблицу.
Это вообще бестолковое занятие. Хоть через запрос, хоть через таблицу, хоть как.
← →
ViktorZ © (2006-03-01 17:33) [7]
> INSERT INTO TOTAL(CARD,SUMMA)
> SELECT C.Card,SUM(AR.Qnt*AR.RealPrice) as SUMMA
> попробуй
T41.SQL.Text:="INSERT INTO TOTAL(CARD,SUMMA) SELECT C.Card , SUM(AR.Qnt*AR.RealPrice) AS SUMMA FROM CARDS C, ARcheck AR, "+
" Menu M, ACheck A, ADCheck AD WHERE (A.Sys_Num=AD.Sys_Num) "+
" AND (M.Categ=:P1) AND (AD.SIFR=:P2) AND (AD.Sys_Num=AR.Sys_Num) AND "+
" (AR.Sifr=M.Sifr) AND (C.CARD=AD.CardCod) AND (A.LogicDAte BETWEEN :P3 AND :P4) "+
" GROUP BY C.Card";
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.ExecSQL;
Не работает. Operation Not applicable. У меня скоро будет нервный срыв:_)))
← →
msguns © (2006-03-01 17:45) [8]Кол-во и тип полей целевой таблицы должны полностью совпдать с перечнем в селекте. Если поля не совпвадают по типу или в селекте используются агрегатные фнкции, то надо указывать явное преобразование CAST
← →
msguns © (2006-03-01 17:50) [9]Пример из справки:
To add rows to one table that are retrieved from another table, omit the VALUES keyword and use a subquery as the source for the new rows.
INSERT INTO "Customer.db"
(CustNo, Company)
SELECT CustNo, Company
FROM "OldCustomer.db"
The INSERT statement only supports SELECT subqueries in the VALUES clause. References to tables other than the one to which rows are added or columns in such tables are only possible in SELECT subqueries.
← →
ViktorZ © (2006-03-01 18:10) [10]T41.SQL.Text:="INSERt INTO Total(Card,SUMMA) SELECT C.Card ,CAST SUM(AR.qnt*AR.RealPrice) AS NUMBER FROM CARDS C, ARcheck AR, "+
" Menu M, ACheck A, ADCheck AD WHERE (A.Sys_Num=AD.Sys_Num) "+
" AND (M.Categ=:P1) AND (AD.Sifr=:P2) AND (AD.Sys_Num=AR.Sys_Num) AND "+
" (AR.Sifr=M.Sifr) AND (C.CARD=AD.CardCod) AND (A.LogicDAte BETWEEN :P3 AND :P4) "+
" GROUP BY C.Card";
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.ExecSQL;
ТАк?Тоже не работает. Invalid use of keyword.
Token: SUM(AR.qnt*AR.RealPrice)
Готов заплатить 10$ тому кто поможет мне сделать этот запрос для 4 баз. Вернее есть 4 алиаса и мне по ним надо свалить все в табличку единую. Что посчитать общую сумму по каждой CArd/
← →
Sergey13 © (2006-03-02 09:30) [11]2[10] ViktorZ © (01.03.06 18:10)
> SELECT C.Card ,CAST SUM(AR.qnt*AR.RealPrice) AS NUMBER FROM
Где ты нашел такой синтаксис? В справку по LocalSQL не судьба глянуть?
← →
msguns © (2006-03-02 09:39) [12]Из справки:
Converts specified value to the specified data type.
CAST(column_reference AS data_type)
Description
Use CAST to convert the value in the specified column to the data type specified. CAST can also be applied to literal and calculated values. CAST can be used in the columns list of a SELECT statement, in the predicate for a WHERE clause, or to modify the update atom of an UPDATE statement.
The Data_Type parameter may be one of most column data type applicable to the table type used: CHAR, INTEGER, NUMERIC, and so on. Certain column types cannot be used as the source or target data types: BLOB, MEMO, and BYTES.
The statement below converts a Paradox TIMESTAMP column value to DATE.
SELECT CAST(SaleDate AS DATE)
FROM ORDERS
← →
msguns © (2006-03-02 09:47) [13]>ViktorZ © (01.03.06 18:10) [10]
>Вернее есть 4 алиаса и мне по ним надо свалить все в табличку единую. Что посчитать общую сумму по каждой CArd/
Из той же справки:Joins two tables from different databases.
SELECT column_list
FROM ":database_reference:table_reference", ":database_reference:table_reference" [,":database_reference:table_reference"...]
WHERE predicate [AND predicate...]
Description
Use a heterogeneous join to join two tables that reside in different databases. The joined tables may be of different types (like dBASE to Paradox or Paradox to InterBase), but you can only join tables whose database types are accessible through the BDE (local, ODBC, or SQL Links). A hetergeneous join may be any of the joins supported by local SQL. The difference is in the syntax for the table reference: the database containing each table is specified in the table reference, surrounded by colons and the whole reference enclosed in quotation marks. The database specified as part of the table reference may be a drive and directory reference (for local tables) or a BDE alias.
SELECT *
FROM ":DBDEMOS:Customer.db" C, ":BCDEMOS:Orders.db" O
WHERE (C.CustNo = O.CustNo)
>Готов заплатить 10$ тому кто поможет мне сделать этот запрос для 4 баз
Схема такова:
1. Составляется запрос на выборку чего надо из 4-х баз в один датасет через UNION. Запрос отлаживается и сохраняется в текстовом формате
2. Делается запрос к сохраненному селекту с суммированием и группировкой.
Причитающиеся мне 10 баксов потратьте на пиво или кефир (не знаю, что вы предпочитаете) - дабы успокоить нервы.
← →
ViktorZ © (2006-03-02 14:39) [14]T41.SQL.Text:="INSERT INTO Total(CARD,SUMMA) SELECT C.Card ,CAST(SUM(AR.qnt*AR.RealPrice) AS NUMERIC) AS SUMMA FROM CARDS C, ARcheck AR, "+
" Menu M, ACheck A, ADCheck AD WHERE (A.Sys_Num=AD.Sys_Num) "+
" AND (M.Categ=:P1) AND (AD.Sifr=:P2) AND (AD.Sys_Num=AR.Sys_Num) AND "+
" (AR.Sifr=M.Sifr) AND (C.CARD=AD.CardCod) AND (A.LogicDAte BETWEEN :P3 AND :P4) "+
" GROUP BY C.Card";
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.EXECSQL;
Я не знаю ну что тут не так. А ошибка как была так и есть. Operation not Applicable. И хоть ты тресни никак. Справку перечитал, про Инсерт. Пиво с кефиром никак не помогают.
← →
ViktorZ © (2006-03-02 14:40) [15]T41.SQL.Text:="INSERT INTO Total(CARD,SUMMA) SELECT C.Card ,CAST(SUM(AR.qnt*AR.RealPrice) AS NUMERIC) AS SUMMA FROM CARDS C, ARcheck AR, "+
" Menu M, ACheck A, ADCheck AD WHERE (A.Sys_Num=AD.Sys_Num) "+
" AND (M.Categ=:P1) AND (AD.Sifr=:P2) AND (AD.Sys_Num=AR.Sys_Num) AND "+
" (AR.Sifr=M.Sifr) AND (C.CARD=AD.CardCod) AND (A.LogicDAte BETWEEN :P3 AND :P4) "+
" GROUP BY C.Card";
T41.Params[0].AsInteger :=strToInt(Edit3.text);
T41.Params[1].AsInteger :=strToInt(Edit4.text);
T41.Params[2].AsDate:= strtodate(Edit1.text);
T41.Params[3] .AsDAte :=strtodate(Edit2.text);
T41.EXECSQL;
Я не знаю ну что тут не так. А ошибка как была так и есть. Operation not Applicable. И хоть ты тресни никак. Справку перечитал, про Инсерт. Пиво с кефиром никак не помогают.
← →
Sergey13 © (2006-03-02 15:11) [16]2[15] ViktorZ © (02.03.06 14:40)
Странно. Вроде правильно все.
Селект без инсерта идет в этой редакции?
← →
ViktorZ © (2006-03-02 15:30) [17]ДА Идет.
← →
Sergey13 © (2006-03-02 15:33) [18]А таблица Total(CARD,SUMMA) создана?
← →
ViktorZ © (2006-03-02 15:57) [19]ДА создана. Тип обоих полей Numeric.
← →
Sergey13 © (2006-03-02 16:06) [20]2 [19] ViktorZ © (02.03.06 15:57)
Попробуй еще CARD прямо закастовать. Шаманство конечно, но вдруг.
← →
ViktorZ © (2006-03-02 16:39) [21]ПРобовал, Нифига.
← →
Sergey13 © (2006-03-02 16:48) [22]А без GROUP BY идет? Просто селект полей.
← →
ViktorZ © (2006-03-02 17:16) [23]Если без GROUP BY C.Card,а в селекте он есть, то:
"GROUP BY is required when both aggregate and non-aggregate fields are used in result set.".
Если C.Card нет в селекте то нормально идет и без GROUP BY. Выводит только сумму.
← →
ViktorZ © (2006-03-02 19:08) [24]КАжется это не реально. Первый раз столкнулся с тем что не могу сам и не могут остальные.
← →
ViktorZ © (2006-03-02 20:08) [25]РЕАЛЬНо блин. ТОлько как? Спустя 3 суток вот ответ:
INSERT INTO TOTAL(NAMe,CArd,SUMMA) SELECT F.name, F.CArd,F.Summa FROm "fgh.sql" F WHERE F.CAteg=:P1" +
" AND F.Sifr=:P2 AND F.LogicDate between :P3 AND :P4
где fgh.sql заранее подготовлен.
Уже в который раз программирование учит меня не сдаваться и делать до конца. ВСЕЕМ спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.012 c