Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #31  
Старый 18.12.2015, 18:03
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Не вижу ошибки. Вроде все верно. Попробуйте без параметров р1 и р2 пока, задать ограничение константой.
А в табличке у вас есть поле [id] ?
id я так понимаю это самое первое поле с нумерацией, у меня там "код" написано, заменил, всё равно ошибка такая же.
Ответить с цитированием
  #32  
Старый 18.12.2015, 18:46
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Не вижу ошибки. Вроде все верно. Попробуйте без параметров р1 и р2 пока, задать ограничение константой.
А в табличке у вас есть поле [id] ?
не понимаю почему, но создал проект по новой, вбил всё тоже и заработало, выдает поле1, поле2, столбец с буковками заморскими(назвался он Expr1002) и три столбца с надписями "первое слагаемое" "второе слагаемое" и "сумма", а как теперь сделать чтобы
Код:
Expr1002:=summa
или оно уже число из столбца сумма соответствует букве из столбца Expr1002?
Ответить с цитированием
  #33  
Старый 18.12.2015, 18:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,496
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Цитата:
Сообщение от ЧайниКсНосикоМ
не понимаю почему, но создал проект по новой, вбил всё тоже и заработало, выдает поле1, поле2, столбец с буковками заморскими(назвался он Expr1002) и три столбца с надписями "первое слагаемое" "второе слагаемое" и "сумма", а как теперь сделать чтобы
Код:
Expr1002:=summa
или оно уже число из столбца сумма соответствует букве из столбца Expr1002?

В запросе добавь еще одну конструкцию:
Код:
SELECT T1.[pole1], T1.[pole2],Chr(count(1)+64), T1.[pole3] as [Первое слагаемое], T1.[pole4] as [Второе слагаемое], T1.[pole3]+T1.[pole4] AS summa, Chr(count(1)+64) || '=' || T1.[pole3]+T1.[pole4] as summa_str ...
Будет поле summa_str. В зависимости от БД, может потребоваться заменить || на +
Ответить с цитированием
  #34  
Старый 18.12.2015, 21:55
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
В запросе добавь еще одну конструкцию:
Код:
SELECT T1.[pole1], T1.[pole2],Chr(count(1)+64), T1.[pole3] as [Первое слагаемое], T1.[pole4] as [Второе слагаемое], T1.[pole3]+T1.[pole4] AS summa, Chr(count(1)+64) || '=' || T1.[pole3]+T1.[pole4] as summa_str ...
Будет поле summa_str. В зависимости от БД, может потребоваться заменить || на +
Код:
qry1.SQL.Add('SELECT T1.[поле1], T1.[поле2],Chr(count(1)+64), T1.[поле3] as [Первое слогаемое], T1.[поле4] as [Второе слогаемое], T1.[поле3]-T1.[поле4] AS summa, Chr(count(1)+64) +"="+ T1.[pole3]-T1.[pole4] as summa_str');
пишет отсутсвует значение для одного или нескольких требуемых параметров.
Ответить с цитированием
  #35  
Старый 18.12.2015, 23:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,496
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

на вид все нормально, только там одинарная кавычка вокруг = должна быть (для ввода надо поставить в строке подряд 2 одинарные кавычки).
Ну и конец запроса-то ты куда дел? Я ж не просто так многоточие поставил. Это значит, что все остальные строки запроса надо оставить как есть.
Ответить с цитированием
  #36  
Старый 19.12.2015, 16:22
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
на вид все нормально, только там одинарная кавычка вокруг = должна быть (для ввода надо поставить в строке подряд 2 одинарные кавычки).
Ну и конец запроса-то ты куда дел? Я ж не просто так многоточие поставил. Это значит, что все остальные строки запроса надо оставить как есть.
при таком виде
Код:
Chr(count(1)+64) +'='+ T1.[pole3]-T1.[pole4]
выдаёт ошибку при компиляции [Error] Unit2.pas(36): Incompatible types: 'String' and 'Boolean'
если писать так
Код:
Chr(count(1)+64) +''=''+ T1.[pole3]-T1.[pole4] 
две одинарные кавычки вместо одних двойных, отсутствует пишет значение для одного или нескольких параметров, ну а код я просто не стал весь копировать, так то получается вот такой код
Код:
begin
 qry1.Close; 
 qry1.SQL.Clear;
 qry1.SQL.Add('SELECT T1.[поле1], T1.[поле2],Chr(count(1)+64), T1.[поле3] as [Первое слогаемое], T1.[поле4] as [Второе слогаемое], T1.[поле3]-T1.[поле4] AS summa, Chr(count(1)+64) +''=''+ T1.[pole3]-T1.[pole4] as summa_str');
 qry1.SQL.Add('FROM [таблица1] as T1 inner join [таблица1] as T2 on T1.[код]>T2.[код] group by T1.[поле1], T1.[поле2], T1.[поле3], T1.[поле4]');
 qry1.SQL.Add(' having T1.[поле1]=:p1 AND T1.[поле2]=:p2'); 
 qry1.Parameters.ParamByName('p1').Value := edt1.text;
 qry1.Parameters.ParamByName('p2').Value := edt2.text;
 qry1.Open;
end;
Ответить с цитированием
  #37  
Старый 20.12.2015, 05:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,496
Версия Delphi: 7, XE3, 10.2
Репутация: 49088
По умолчанию

Попробуй последнее выражение переписать вот так:
Код:
Chr(count(1)+64) +''=''+ Str(T1.[pole3]-T1.[pole4]) as summa_str
Ответить с цитированием
  #38  
Старый 20.12.2015, 14:56
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Это же акцес, для него сцепление строк реализовано иначе:
Код:
select 
Т1.Поле1 as Дисциплина,
Т1.Поле2 as Действие,
Chr(Count(1)+64) & " = " & Т1.Поле3  & " + " & Т1.Поле4 as Формула, 
Т1.Поле3 as [Первое слагаемое],
Т1.Поле4 as [Второе слагаемое],
Т1.Поле3 + Т1.Поле4 as Результат
from Таблица1 as Т1
inner join Таблица1 as Т2
on Т1.id >= Т2.id 
group by Т1.Поле1, Т1.Поле2,Т1.Поле3,Т1.Поле4
having Т1.Поле1 = 'Математика' and Т1.Поле2 = 'Сложение'
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #39  
Старый 20.12.2015, 15:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

Опаньки, а вот в Дельфи получаем небольшую проблемку.
Выражение: Chr(Count(1)+64) & " = " & Т1.Поле3 & " + " & Т1.Поле4 as Формула
автоматом получает тип TWideMemoField и как следствие в гриде не желает показывать содержимое. Если будете использовать грид, то на поле Формула надо повесить вот такое событие:
Код:
procedure TForm8.ADOQuery1ФормулаGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
 Text := TWideStringField(Sender).Value
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #40  
Старый 20.12.2015, 18:21
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Опаньки, а вот в Дельфи получаем небольшую проблемку.
Выражение: Chr(Count(1)+64) & " = " & Т1.Поле3 & " + " & Т1.Поле4 as Формула
автоматом получает тип TWideMemoField и как следствие в гриде не желает показывать содержимое. Если будете использовать грид, то на поле Формула надо повесить вот такое событие:
Код:
procedure TForm8.ADOQuery1ФормулаGetText(Sender: TField; var Text: string; DisplayText: Boolean);
begin
 Text := TWideStringField(Sender).Value
end;
эммм, а в столбце формула так и должно выводиться или как?
Вложения
Тип файла: rar Безымянный.rar (180.1 Кбайт, 2 просмотров)
Ответить с цитированием
  #41  
Старый 20.12.2015, 19:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

А что не так? Аргументы для функции задаются в полях 3 и 4. Из того что было сказано ранее я сделал такой вывод. Но вы можете переделать под себя как вам нужно, идею теперь вы поняли.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #42  
Старый 21.12.2015, 17:12
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
А что не так? Аргументы для функции задаются в полях 3 и 4. Из того что было сказано ранее я сделал такой вывод. Но вы можете переделать под себя как вам нужно, идею теперь вы поняли.
ну я имею виду что записано, например, а=3-1 и а=2 в итоге, по этому коду программа сможет посчитать то или просто так и останется а=3-1?
если я напишу
Код:
Label1.Caption:=А
то программа мне выведет не 3-1, а именно 2?
Ответить с цитированием
  #43  
Старый 21.12.2015, 17:26
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
А что не так? Аргументы для функции задаются в полях 3 и 4. Из того что было сказано ранее я сделал такой вывод. Но вы можете переделать под себя как вам нужно, идею теперь вы поняли.
не так то всё тут просто, ввел вот такой код
Код:
procedure TForm1.btn1Click(Sender: TObject);
var A: Integer;
begin
 qry1.Close; //
 qry1.SQL.Clear; // 
 qry1.SQL.Add('SELECT T1.[поле1], T1.[поле2],Chr(count(1)+64) &"="& T1.[поле3]&"-"&T1.[поле4] as [формула], T1.[поле3] as [первое слогаемое], T1.[поле4] as [второе слогаемое], T1.[поле3]-T1.[поле4] AS [результат]');
 qry1.SQL.Add('FROM [таблица1] as T1 inner join [таблица1] as T2 on T1.[код]>T2.[код] group by T1.[поле1], T1.[поле2], T1.[поле3], T1.[поле4]');
 qry1.SQL.Add(' having T1.[поле1]=:p1 AND T1.[поле2]=:p2');
 qry1.Parameters.ParamByName('p1').Value := edt1.text;
 qry1.Parameters.ParamByName('p2').Value := edt2.text;
 qry1.Open;
lbl1.Caption:=IntToStr(a);
end;
и в лейбле мне вывело число "4422148"
а в столбце формула а=3-1

Последний раз редактировалось ЧайниКсНосикоМ, 21.12.2015 в 17:29.
Ответить с цитированием
  #44  
Старый 21.12.2015, 22:43
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,714
Репутация: 52347
По умолчанию

А как связаны левая переменная А с выполнением запроса? Вы ее создаете локально, ничем не инициализируете и какой мусор содержится в А - это знает только Билли.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 21.12.2015 в 22:45.
Ответить с цитированием
  #45  
Старый 22.12.2015, 18:11
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
А как связаны левая переменная А с выполнением запроса? Вы ее создаете локально, ничем не инициализируете и какой мусор содержится в А - это знает только Билли.
А вы не подскажете как программе указать на ту самую "а" которая находится в поле "формула"?
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2019

ВКонтакте   Facebook   Twitter