![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрос [D5, Рђccess]
Ветерок © (2003-10-31 13:21:00)
Подскажите, пожалуйста чего можно сделать в такой ситуации. есть база данных в 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 строке.
Что можно сделать, чтобы избежать ошибки?
paul_k (2003-10-31 17:28:00) [1]
Ветерок (31.10.03 17:17) [32]
очень неплохой вариант.
Ветерок (31.10.03 15:19) [24]
> данные по годам содержатся в разных базах Access
впихнуть во все базы по запросу... вариант.
а ещё можно сделать n+1 базу, связать с ней нужные таблицы из нужных баз, построить запросы и с ними уже работать.
+ : все данные в одном месте
- : если "умный юзер" перетащит куда-нить приатаченую базу - все развалится.
Sandman25 (2003-10-31 17:22:00) [2]
[32] Ветерок (31.10.03 17:17)
View, что ли?
Ветерок (2003-10-31 17:17:00) [3]
Просто создала в базе Access запрос с псевдонимами полей в латинице. В запросе объединила несколько нужных таблиц (то есть уже несколько действий в делфи делать не надо) и дала короткое название запросу также латиницей.
paul_k (2003-10-31 15:53:00) [4]
и что это за "другой путь"?
Ветерок (2003-10-31 15:51:00) [5]
Да нет, нету таких там проблем. Очень даже получилось. :)
sniknik (2003-10-31 15:39:00) [6]
> попробую пойти другим путем.
на том пути будут те же баги если с этими не разберешся.
(вот ленин пошол другим путем, и что мы счас имеем? ;()
paul_k (2003-10-31 15:34:00) [7]
так и я про то-же самое.
поставить псевдонимы по русски а поля прописать правильно.
визуально юзер аксеса не должен заметить изменений
Ветерок (2003-10-31 15:32:00) [8]
Нет, там поля по-русски и это не псевдонимы. Я хоть и мало знакома с Accessом, но такие вещи знаю :)
Ладно, попробую пойти другим путем.
Спасибо всем за помощь и советы.
sniknik (2003-10-31 15:31:00) [9]
paul_k © (31.10.03 15:01) [18]
не стоит так делать, параметры более правильное решение
другое дело что запрос написан неправильно (лишние скобки, руские названия без скобок и не текст, в параметры даются текстовые значения а поля типизированы (даты)).
для примера самый простой запрос
SELECT "Сообщение"
рабочий
SELECT Сообщение
ошибка "No value given for one or more required parameters"
ничего не напоминает? а если в запросе одно из полей по русски ни к чему не привязано? и интерпретируется именно так.
paul_k (2003-10-31 15:22:00) [10]
В Акссесе есть такая букавка - псевдоним поля.
то есть имя поля - латиницей, а псевдоним по русски в результате пользователь аксеса видит все по русски а Вы стучитесь к правильно названным полям
на запрос, как я выше писал что ругается? и какими словами?
paul_k © (31.10.03 15:01) [18]
Ветерок (2003-10-31 15:19:00) [11]
Задача состоит в том, чтобы преобразовать данные из Аccess в таблицу в Excelе, но не просто данные туда перекачать, а создать спец.табличку с "шапкой", которая содержит данные по нескольким годам в виде сумм, % и абсолютных соотношений. данные по годам содержатся в разных базах Access. Все это переименовать я конечно же могу, мне бы даже легче было так работать, но проблема в том, что базы используются сразу несколькими пользователями (не программистами) и я не думаю, что им будет хорошо, если я предложу перименовать поля латиницей. Перекинуть я тож не могу, так как базы обновляются буквально ежечасно.
paul_k (2003-10-31 15:13:00) [12]
А какая задача стоит? может проще её сделать средствами самого ACCESS?
paul_k (2003-10-31 15:12:00) [13]
> Так я уже писала-не проходит.
что пишет? на что ругается?
попробуйте, все-же для чистоты эксперимента выполнить так как я написал
и 2-е опять же - если не заработает, потрудитесь, переименуйте таблицу и поля латиницей и проверьте результат.
> база уже приходит и я ничего изменить в ней не могу
изменить да, а перекинуть данные в нужную Вам структуру - можете
Ветерок (2003-10-31 15:08:00) [14]
Paul_k: Если бы у меня запрос таким образом как у вас написан работал, то я бы сюда не обращалась за помощью. Так я уже писала-не проходит.
Ветерок (2003-10-31 15:04:00) [15]
Chtr: Это должно быть q1, я просто попутала, потом уже исправила
paul_k (2003-10-31 15:01:00) [16]
хотя-бы запрос правильно написать
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:00) [17]
а чего в q2.sql?
Ветерок (2003-10-31 14:56:00) [18]
Paul_k: ну что ж я сделаю, если мне такая база уже приходит и я ничего изменить в ней не могу, так как она используется не только мной.
Ветерок (2003-10-31 14:51:00) [19]
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;
chtr (2003-10-31 14:50:00) [20]
Поставь пробелы:
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)");