Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2009, 22:35   #1
Zibellina
Новичок
Джуниор
 
Регистрация: 29.06.2009
Сообщений: 10
Печаль запрос sql

есть БД (телефонная база).из этой бд считываем в дбгрид (поля phone, name и т.д.). В самой базе в столбце NAME содержится ФИО.
задание следующее разделить фио на две части(фамилия , имя отчество) и поместить их в дбгрид, чтобы выводилось уже не полностью фио, а фамилия в одном столбце, ИО в другом...
если потребуется смогу предоставить код программы.
Zibellina вне форума Ответить с цитированием
Старый 29.06.2009, 23:03   #2
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

самое простое что приходит в голову, это
завести две переменые и считывать в одну данные до пробела из записи, а во вторую заносить оставшуюся часть, и потом помещать их куда надо...
______
А может возможно переделать структуру таблицы и разделить фио, заносить отдельно
maLoy*508 вне форума Ответить с цитированием
Старый 29.06.2009, 23:13   #3
Zibellina
Новичок
Джуниор
 
Регистрация: 29.06.2009
Сообщений: 10
По умолчанию

я знаю что нужно сформировать запрос который считывал бы значение имени после пробела, а затем заносил бы эти данные в новый столбик, а в поле нейм чтобы удалял значения после пробела...
вот только как это реализовать кодом я не знаю...
Zibellina вне форума Ответить с цитированием
Старый 30.06.2009, 07:03   #4
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Опять же - СУБД какая?

Пример для SQL Server:

Код:
create table #person 
   ( id numeric ( 5 ),
     FIO varchar( 50 )
   )

  insert into #person
  values ( 1, 'Иванов Иван Иванович' )

  insert into #person
  values ( 2, 'Петров Петр Петрович' )


SELECT
  PARSENAME( F, 3 ) as surname,
  PARSENAME( F, 2 ) + ' ' + PARSENAME( F, 1 ) as name_pat
FROM
  ( SELECT REPLACE( FIO, ' ', '.') F from #person ) S

drop table #person
edgy вне форума Ответить с цитированием
Старый 30.06.2009, 07:23   #5
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Как раз для этих целей служат вычисляемые поля датасета. Создаем такое поле и в обработчике onCalcFields пишем что-то вроде
Код:
procedure TForm1.ADOTable1CalcFields(DataSet: TDataSet);
begin
  ADOTable1Fam.Value := Copy(ADOTable1.FieldByName('ФИО').Value, 1,Pos(#32,ADOTable1.FieldByName('ФИО').Value));;
end;
Здесь я привожу лишь ту часть, которая фамилию отделяет. Дальше уж сами...
Баламут вне форума Ответить с цитированием
Старый 30.06.2009, 10:03   #6
Zibellina
Новичок
Джуниор
 
Регистрация: 29.06.2009
Сообщений: 10
По умолчанию

БД Access...
Zibellina вне форума Ответить с цитированием
Старый 30.06.2009, 10:31   #7
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Цитата:
Сообщение от Zibellina Посмотреть сообщение
БД Access...
В данном случае это не имеет никакого значения. Кликните 2 раза по ADOTable (или как вы подключаете таблицы) и создайте вычисляемое поле строкового типа. В приведенном мной примере я создал поле с именем Fam.
Баламут вне форума Ответить с цитированием
Старый 30.06.2009, 10:52   #8
Zibellina
Новичок
Джуниор
 
Регистрация: 29.06.2009
Сообщений: 10
По умолчанию

хм... я не особо одарен в делфи, у меня через адоквери подключена бд... но я не знаю куда там прописывать...
Zibellina вне форума Ответить с цитированием
Старый 30.06.2009, 11:01   #9
Zibellina
Новичок
Джуниор
 
Регистрация: 29.06.2009
Сообщений: 10
По умолчанию

как sql запросом создать в дбгриде новый столбик? подскажите пожалуйсто...
я пробую так
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOQuery2.sql.text:='Alter Table PHONE2 ADD INICIAL TEXT AFTER NAME';
end;
но после этого запроса он вобще выводит только один столбик без названия и данных, при любой операции после этого бд возвращается в обычное состояние... может я что-то не правильно делаю...?
Zibellina вне форума Ответить с цитированием
Старый 30.06.2009, 11:22   #10
Zibellina
Новичок
Джуниор
 
Регистрация: 29.06.2009
Сообщений: 10
По умолчанию

подскажите пожалуйста, почему я не могу прикрипить rar с проектом?
Zibellina вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запрос Dux БД в Delphi 5 27.08.2008 13:36
SQL-запрос Dissonance БД в Delphi 5 17.06.2008 07:11
SQL-запрос Alexey_vyb БД в Delphi 4 22.05.2007 18:52
SQL-запрос Elena БД в Delphi 3 21.05.2007 11:34
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15