Форум: "Базы";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];
ВнизЗапрос Найти похожие ветки
← →
Ветерок (2003-10-31 13:21) [0]Подскажите, пожалуйста чего можно сделать в такой ситуации. есть база данных в Access, пытаюсь с помощью Delphi вытащить с нее данные для работы. Пишу так:
q2.close;
q1.SQL.clear;
q2.ParamCheck:= true;
q1.SQL.Text:="SELECT Sum([погрузка]![Вес])AS Всего FROM [погрузка] WHERE (((([погрузка].Месяц)=:mes) or (([погрузка].Месяц)<:mes1)) AND (([погрузка].[код])=1) and (([погрузка].Наименование)=:n) and (([погрузка].Сообщение)=:s))";
q2.parameters[0].value:= trim(edit1.text);
q2.parameters[1].value:= trim(edit1.text);
q2.parameters[2].value:= trim(edit3.text);
q2.parameters[3].value:= trim(edit4.text);
q2.open;
Delphi выдает ошибку String literals may have at most 255 elements на 4 строке.
Что можно сделать, чтобы избежать ошибки?
← →
sniknik (2003-10-31 13:27) [1]вот это например
q2.parameters[3].value:= Copy(trim(edit4.text), 1, 255);
← →
bushmen (2003-10-31 13:27) [2]Возьми с сайта Борланда обновления для Delphi5
← →
Sandman25 (2003-10-31 13:29) [3]Вместо SQL.Text := "строка длиннее 255 символов"
делать
SQL.Add("строка");
SQL.Add("длиннее");
SQL.Add("255 символов");
← →
Ветерок (2003-10-31 13:35) [4]Я знаю? что строка длиннее№ Я пробовала урезать и написать в
← →
Sandman25 (2003-10-31 13:35) [5]SQL. Add
← →
Ветерок (2003-10-31 13:42) [6]Поробовала Add. Выдает ошибку, что слишком мало параметров. требуется 5. У меня всего 4 :(
← →
paul_k (2003-10-31 13:47) [7]Такую ошибку Access выдает , если поле неправильно написано
удали все лишние скобки в том числе и квадратные.
проверь есть ли в таблице поля, которые присутствуют в запросе
← →
Sandman25 (2003-10-31 13:48) [8]Настройте SQL.Text в Design-time, чтобы найти ошибку.
← →
sniknik (2003-10-31 13:50) [9]не то, вся строка запроса = 212 символов.
так четвертая строка это не на параметрах? а на q1.SQL.Text?
или это не вся? можеш сократить
... FROM [погрузка] AS P WHERE ...
и вместо ([погрузка].месяц=:mes) = (P.месяц=:mes)
← →
Ветерок (2003-10-31 14:29) [10]Не проходит такой номер с FROM [погрузка] AS P WHERE ... Опять слишком мало параметров
← →
chtr (2003-10-31 14:42) [11]
> Поробовала Add. Выдает ошибку, что слишком мало параметров.
> требуется 5. У меня всего 4 :(
Брось код поглядеть?
← →
chtr (2003-10-31 14:42) [12]
> Поробовала Add. Выдает ошибку, что слишком мало параметров.
> требуется 5. У меня всего 4 :(
Брось код поглядеть?
← →
sniknik (2003-10-31 14:44) [13]а вот так?
q1.SQL.Add("SELECT Sum(P.[Вес]) AS [Всего]");
q1.SQL.Add("FROM [погрузка] AS P");
q1.SQL.Add("WHERE ((P.[Месяц]=:mes) or (P.[Месяц]<:mes1) and (P.[код]=1))");
q1.SQL.Add("and (P.[Наименование]=:n) and (P.[Сообщение]=:s)");
(логика условия естественно не сохранена, только ты знаеш чего хотел этим добится, просто выкинуты явно лишние скобки)
и кстати
> Опять слишком мало параметров
это где? на какой строке выдает?
← →
paul_k (2003-10-31 14:49) [14]текст запроса
SELECT Sum([погрузка]![Вес])AS Всего FROM [погрузка] WHERE (((([погрузка].Месяц)=:mes) or (([погрузка].Месяц)<:mes1)) AND (([погрузка].[код])=1) and (([погрузка].Наименование)=:n) and (([погрузка].Сообщение)=:s))
лучше переписать как
SELECT Sum(погрузка.Вес)AS Всего
FROM погрузка
WHERE погрузка.Месяц in (:mes,:mes1)
AND погрузка.код=1
and погрузка.Наименование=:n
and погрузка.Сообщение=:s
имена таблиц и полей написанные кирилицей есть не совсем корректно (точнее совсем некорректно)
← →
chtr (2003-10-31 14:50) [15]Поставь пробелы:
q1.SQL.Add("SELECT Sum(P.[Вес]) AS [Всего]");
q1.SQL.Add(" FROM [погрузка] AS P");
q1.SQL.Add(" WHERE ((P.[Месяц]=:mes) or (P.[Месяц]<:mes1) and (P.[код]=1))");
q1.SQL.Add(" and (P.[Наименование]=:n) and (P.[Сообщение]=:s)");
← →
Ветерок (2003-10-31 14:51) [16]Sniknik: И так тоже не выходит. А ошибку выдает уже на q2.open;
Chtr: Код выглядит так:
q2.close;
q1.SQL.clear;
q2.ParamCheck:= true;
q1.SQL.Add("SELECT Sum([погрузка]![Вес])AS Всего FROM [погрузка]");
q1.SQL.Add("WHERE (((([погрузка].Месяц)=:mes) or (([погрузка].Месяц)<:mes1)) AND (([погрузка].[код])=1) and (([погрузка].Наименование)=:n) and (([погрузка].Сообщение)=:s))");
q2.parameters[0].value:= trim(edit1.text);
q2.parameters[1].value:= trim(edit1.text);
q2.parameters[2].value:= trim(edit3.text);
q2.parameters[3].value:= trim(edit4.text);
q2.open;
← →
Ветерок (2003-10-31 14:56) [17]Paul_k: ну что ж я сделаю, если мне такая база уже приходит и я ничего изменить в ней не могу, так как она используется не только мной.
← →
paul_k (2003-10-31 15:01) [18]хотя-бы запрос правильно написать
q1.SQL.Add("SELECT Sum(погрузка.Вес)AS Всего");
q1.SQL.Add(" FROM погрузка");
q1.SQL.Add("WHERE погрузка.Месяц in ("""+trim(edit1.text)+""","""+trim(edit1.text)+"""");
//хотя если значение одно и то-же зачем 2 параметра?
q1.SQL.Add(" AND погрузка.код=1");
q1.SQL.Add(" and погрузка.Наименование="""+edit3.text+"""");
q1.SQL.Add(" and погрузка.Сообщение="""+edit4.text+"""");
← →
chtr (2003-10-31 15:01) [19]а чего в q2.sql?
← →
Ветерок (2003-10-31 15:04) [20]Chtr: Это должно быть q1, я просто попутала, потом уже исправила
← →
Ветерок (2003-10-31 15:08) [21]Paul_k: Если бы у меня запрос таким образом как у вас написан работал, то я бы сюда не обращалась за помощью. Так я уже писала-не проходит.
← →
paul_k (2003-10-31 15:12) [22]
> Так я уже писала-не проходит.
что пишет? на что ругается?
попробуйте, все-же для чистоты эксперимента выполнить так как я написал
и 2-е опять же - если не заработает, потрудитесь, переименуйте таблицу и поля латиницей и проверьте результат.
> база уже приходит и я ничего изменить в ней не могу
изменить да, а перекинуть данные в нужную Вам структуру - можете
← →
paul_k (2003-10-31 15:13) [23]А какая задача стоит? может проще её сделать средствами самого ACCESS?
← →
Ветерок (2003-10-31 15:19) [24]Задача состоит в том, чтобы преобразовать данные из Аccess в таблицу в Excelе, но не просто данные туда перекачать, а создать спец.табличку с "шапкой", которая содержит данные по нескольким годам в виде сумм, % и абсолютных соотношений. данные по годам содержатся в разных базах Access. Все это переименовать я конечно же могу, мне бы даже легче было так работать, но проблема в том, что базы используются сразу несколькими пользователями (не программистами) и я не думаю, что им будет хорошо, если я предложу перименовать поля латиницей. Перекинуть я тож не могу, так как базы обновляются буквально ежечасно.
← →
paul_k (2003-10-31 15:22) [25]В Акссесе есть такая букавка - псевдоним поля.
то есть имя поля - латиницей, а псевдоним по русски в результате пользователь аксеса видит все по русски а Вы стучитесь к правильно названным полям
на запрос, как я выше писал что ругается? и какими словами?
paul_k © (31.10.03 15:01) [18]
← →
sniknik (2003-10-31 15:31) [26]paul_k © (31.10.03 15:01) [18]
не стоит так делать, параметры более правильное решение
другое дело что запрос написан неправильно (лишние скобки, руские названия без скобок и не текст, в параметры даются текстовые значения а поля типизированы (даты)).
для примера самый простой запрос
SELECT "Сообщение"
рабочий
SELECT Сообщение
ошибка "No value given for one or more required parameters"
ничего не напоминает? а если в запросе одно из полей по русски ни к чему не привязано? и интерпретируется именно так.
← →
Ветерок (2003-10-31 15:32) [27]Нет, там поля по-русски и это не псевдонимы. Я хоть и мало знакома с Accessом, но такие вещи знаю :)
Ладно, попробую пойти другим путем.
Спасибо всем за помощь и советы.
← →
paul_k (2003-10-31 15:34) [28]так и я про то-же самое.
поставить псевдонимы по русски а поля прописать правильно.
визуально юзер аксеса не должен заметить изменений
← →
sniknik (2003-10-31 15:39) [29]> попробую пойти другим путем.
на том пути будут те же баги если с этими не разберешся.
(вот ленин пошол другим путем, и что мы счас имеем? ;()
← →
Ветерок (2003-10-31 15:51) [30]Да нет, нету таких там проблем. Очень даже получилось. :)
← →
paul_k (2003-10-31 15:53) [31]и что это за "другой путь"?
← →
Ветерок (2003-10-31 17:17) [32]Просто создала в базе Access запрос с псевдонимами полей в латинице. В запросе объединила несколько нужных таблиц (то есть уже несколько действий в делфи делать не надо) и дала короткое название запросу также латиницей.
← →
Sandman25 (2003-10-31 17:22) [33][32] Ветерок (31.10.03 17:17)
View, что ли?
← →
paul_k (2003-10-31 17:28) [34]Ветерок (31.10.03 17:17) [32]
очень неплохой вариант.
Ветерок (31.10.03 15:19) [24]
> данные по годам содержатся в разных базах Access
впихнуть во все базы по запросу... вариант.
а ещё можно сделать n+1 базу, связать с ней нужные таблицы из нужных баз, построить запросы и с ними уже работать.
+ : все данные в одном месте
- : если "умный юзер" перетащит куда-нить приатаченую базу - все развалится.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.016 c