Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.012 c
14-66086
Mike Kouzmine
2003-10-15 17:08
2003.11.20
---|Ветка была без названия|---


3-65747
Tumcoat
2003-11-03 04:58
2003.11.20
Переход из group или order by в обычный режим не теряя курсора.


14-66090
aVast
2003-10-29 08:30
2003.11.20
Хочу поиграть


3-65772
Oleksiy
2003-10-27 14:59
2003.11.20
Как правильно сделать индикатор прогресса выполнения запроса...


3-65799
Sam Stone
2003-10-28 16:29
2003.11.20
Работа с query





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский