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

 



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

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


чего то я не фига в его коде не понял, может проще бд через другую прогу создать всё-таки?
Ответить с цитированием
  #17  
Старый 15.12.2015, 20:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от ЧайниКсНосикоМ
DCOUNT возвращает общее число строк (записей) базы данных, соответствующих указанным критериям поиска и содержащих числовые значения. не подходит данная функция (((

Я ж сказал - поищи и почитай. Там как-то хитро народ условие пишет, что она возвращает число записей перед текущей.

А вообще, я не совсем понимаю, зачем тут БД. У тебя же явно записей с десяток. Можно и в памяти все самому сделать. а можно просто получить выборку, скопировать ее куда-нить с простановкой буковок походу. Например, в какой-ниь TMemDataSet. только копировать тогда надо в цикле, используя счетчик. Типа такого:
Код:
ADOQuery.SQL.Text := '...';
ADOQuery.Open; // выполнили запрос, получили данные.
ADOQuery.First;
MemDataSet.Clear;
Cnt := 1;
While Not ADOQuery.EOF Do
begin
  MemDataSet.AppendRecord([ADOQuery.Fields[0].Value, ADOQuery.Fields[1].Value,ADOQuery.Fields[2].Value,Chr(Ord('a')-1+Cnt)]);
  Inc(Cnt);
  ADOQUery.Next;
end;
Код приблизительный, зависит от используемого компонента.
Ответить с цитированием
  #18  
Старый 16.12.2015, 17:21
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle

А вообще, я не совсем понимаю, зачем тут БД. У тебя же явно записей с десяток. Можно и в памяти все самому сделать. а можно просто получить выборку, скопировать ее куда-нить с простановкой буковок походу. Например, в какой-ниь TMemDataSet. только копировать тогда надо в цикле, используя счетчик.
Дело в том что в бд будет не одна тысяча строк записана и сначала программа должна найти нужные мне строки, а затем вычесть из поле3 поле4 и потом она должна сравнить каждое число с нулем и в итоге мне нужно узнать во скольких строках это число будет >0. вот такой геморой.
Ответить с цитированием
  #19  
Старый 16.12.2015, 18:16
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

lmikle а я тут подумал еще, у меня получается столбец с результатом поле3-поле4 выводится по нажатию на кнопку, а можно как то этот столбец програмно скопировать и перенести скажем в таблицу, в которой строки будут проиндексированы, или как это называется. и уже взяв значения из этой таблицы присвоить каждому букву.
Ответить с цитированием
  #20  
Старый 16.12.2015, 19:10
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Можно. INSERT from SELECT называется.
Создай таблицу с автоинкрементным полем.
Сначала чистишь таблицу, потом сбрасываешь счетчик автоинкрементного поля на ней и вставляешь в нее все, что выбирает твой запрос. Ну в дальше конвертировать счетчик в букву уже просто через CHR.
Ответить с цитированием
  #21  
Старый 16.12.2015, 19:57
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Можно. INSERT from SELECT называется.
Создай таблицу с автоинкрементным полем.
Сначала чистишь таблицу, потом сбрасываешь счетчик автоинкрементного поля на ней и вставляешь в нее все, что выбирает твой запрос. Ну в дальше конвертировать счетчик в букву уже просто через CHR.
Ох, понять бы всё это теперь, попробую интернет поюзать, кстати функция chr что делает, а то я читал читал и так не допонял про нее, может статья есть какая интересная про нее?
Ответить с цитированием
  #22  
Старый 16.12.2015, 20:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

chr - возвращает символ, соответсвующий переданному ей цифровому номеру. для ASCII, например, chr(65) вернет A.
Ответить с цитированием
  #23  
Старый 16.12.2015, 22:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,715
Репутация: 52347
По умолчанию

А разобраться как работает мой запрос так и не хватило сил? А ведь он все вам без дополнительных табличек возвращает
Ну вот вам адаптированный под вашу таблицу запрос:
Код:
select 
Т1.Поле1 as Дисциплина,
Т1.Поле2 as Действие,
Chr(count(1)+64),
Т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 = 'Сложение'
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

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

Цитата:
Сообщение от Страдалецъ
А разобраться как работает мой запрос так и не хватило сил? А ведь он все вам без дополнительных табличек возвращает
Ну вот вам адаптированный под вашу таблицу запрос:
Код:
select 
Т1.Поле1 as Дисциплина,
Т1.Поле2 as Действие,
Chr(count(1)+64),
Т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 = 'Сложение'
пишут много буковок (((
[Ошибка] unit1.pas (38): Строковые литералы может иметь не более 255 элементов
вот в этой строке
Код:
qry1.SQL.Add('SELECT T1.[поле1], T1.[поле2],Chr(count(1)+64), T1.[поле3] as [Первое слогаемое], T1.[поле4] as [Второе слогаемое], T1.[поле3]+T1.[поле4] AS summa FROM [таблица1] as T2 on T1.id>T2.id group by T1.[поле1], T1.[поле2], T1.[поле3], T1.[поле4] having [поле1]=:p1 AND [поле2]=:p2');
Ответить с цитированием
  #25  
Старый 17.12.2015, 19:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну разбей на несколько строк, хотя и странно это все, AnsiString до 2 Гб:
Код:
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');
qry1.SQL.Add('FROM [таблица1] as T2 on T1.id>T2.id group by T1.[поле1], T1.[поле2], T1.[поле3], T1.[поле4]');
qry1.SQL.Add('having [поле1]=:p1 AND [поле2]=:p2');
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
  #26  
Старый 17.12.2015, 20:07
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,715
Репутация: 52347
По умолчанию

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

Цитата:
Сообщение от Страдалецъ
И позвольте поинтересоваться, куда подевалась инструкция inner join из моего примера?
оёёй, ослеп на старости лет, каюсь ))))
Ответить с цитированием
  #28  
Старый 17.12.2015, 20:26
ЧайниКсНосикоМ ЧайниКсНосикоМ вне форума
Прохожий
 
Регистрация: 11.12.2015
Сообщения: 23
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну разбей на несколько строк, хотя и странно это все, AnsiString до 2 Гб:
Код:
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');
qry1.SQL.Add('FROM [таблица1] as T2 on T1.id>T2.id group by T1.[поле1], T1.[поле2], T1.[поле3], T1.[поле4]');
qry1.SQL.Add('having [поле1]=:p1 AND [поле2]=:p2');

Код:
begin
 qry1.Close; 
 qry1.SQL.Clear;
 qry1.SQL.Add('SELECT T1.[pole1], T1.[pole2],Chr(count(1)+64), T1.[pole3] as [Первое слагаемое], T1.[pole4] as [Второе слагаемое], T1.[pole3]+T1.[pole4] AS summa');
 qry1.SQL.Add(' FROM [tablitsa1] as T1 inner join [tablitsa1] as T2 on T1.id>T2.id group by T1.[pole1], T1.[pole2], T1.[pole3], T1.[pole4]');
 qry1.SQL.Add(' having T1.[pole1]=:p1 AND T1.[pole2]=:p2'); 
 qry1.Parameters.ParamByName('p1').Value := edt1.text;
 qry1.Parameters.ParamByName('p2').Value := edt2.text;
 qry1.Open;
end;
Я так понимаю вот такой код получается, но тогда по нажатию на кнопку пишет отсутствует значение одного или нескольких параметров.
Ответить с цитированием
  #29  
Старый 17.12.2015, 21:55
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,715
Репутация: 52347
По умолчанию

Не вижу ошибки. Вроде все верно. Попробуйте без параметров р1 и р2 пока, задать ограничение константой.
А в табличке у вас есть поле [id] ?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #30  
Старый 17.12.2015, 23:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ADO? Зайди в дизайнер и создай параметры. Что-то ADO не очень хорошо разбирает параметры из запроса, сталкивался с этим.
Ответить с цитированием
Ответ



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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter