Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 ListBox  [new]
Sergey_Volga
Member

Откуда:
Сообщений: 6
Доброго времени суток. Спасибо всем кто выручает с ответами на вопросы(иногда может глупые, надеюсь простительно для новичка. Я бы памятник поставил или бочку пива, всем кто выручает друг друга). Немножко отвлекся от темы. Есть ListBos, в нем выводится таблица, хочу несколько значений из этой таблицы запихать в одно поле другой таблицы и добавить туда ",". Например "А1, Н2.0" и т.д. Попробовал поставить MultiSelect=T, но забирается только первое выбранное значение. А остальные выпадают. Работаю в 8.0. Заранее спасибо!!!
5 авг 05, 22:41    [1769021]     Ответить | Цитировать Сообщить модератору
 Re: ListBox  [new]
Анатолий Широков
Member

Откуда: Санкт-Петербург
Сообщений: 1319
Прямой поддержки нет (это и понятно, поскольку это прямое нарушение атомарности значения полей), поэтому сохранять подобные значения можно только программно, используя свойство Selected:

local lnIndex, lcValue
lcValue = ''
with Thisform.ListBox
     for lnIndex = 1 to .ListCount
          if .Selected(m.lnIndex)
              lcValue = m.lcValue + .List(m.lnIndex, 1) + '; '
          endif
     endfor   
endwith
* сохраняем в таблице
replace value with m.lcValue

Ну и читать значение тоже программно, устанавливая Selected для полей, которые есть в значении поля:

with Thisform.ListBox
     for lnIndex = 1 to .ListCount
          .Selected(m.lnIndex) = .List(m.lnIndex, 1) + '; ' $ alltrim(table.value)
     endfor   
endwith

ps: Повторю, что никакой пользы от этого "составного поля" нет - ни запрос по нему не сделать, ни отследить правила ссылочную целостность штатными средставми (например, удалили из таблицы A1, а зависимые таблицы ни сном ни духом). Поэтому рекомендую все же нормализовать свою бд.

Удачи!
6 авг 05, 01:45    [1769134]     Ответить | Цитировать Сообщить модератору
 Re: ListBox  [new]
Sergey_Volga
Member

Откуда:
Сообщений: 6
Спасибо Анатолию Широкову за подсказку!!! У меня еще несколько вопросиков появилось. Согласен, что если удалили значение из таблицы, откуда выбираются значения, то невозможно отследить будет это. Значит, я так понимаю, лучше сделать для каждого значения свое поле?(Т.е. нормализовать) А насчет выборки данных, можно ли организовать выборку или поиск так, чтобы узнать содержится в данном поле конкретное значение? (Вроде, если не ошибаюсь, как-то можно при поиске или выборки задать, что поле содержит конкретное значение? А может и ошибаюсь...)
9 авг 05, 23:09    [1773595]     Ответить | Цитировать Сообщить модератору
 Re: ListBox  [new]
Анатолий Широков
Member

Откуда: Санкт-Петербург
Сообщений: 1319
"Нормализовать" в данном случае означает вывести выбранные значения в отдельную таблицу. Например:

// есть таблица языков
create table 'language' (;
       languageid i, ;
       name c(30), ;
       primary key languageid tag langid ;
)
// есть таблица личностей
create table 'person' ( ;
      personid i, ;
      name c(30), ;
      primary key personid tag personid ; 
)
// есть таблица, которая содержит информацию о том, какими языками владеет личность
// именно эта таблица и есть наше "составное поле"
create table 'spoke' ( 
    personid i not null references person tag personid,;
    languageid i not null references language tag languageid, ;
    spoke l not null default .f., ;
    primary key bintoc(personid, 4) + bintoc(languageid, 4) tag spokeid ;
)

Удачи!
10 авг 05, 18:42    [1775576]     Ответить | Цитировать Сообщить модератору
 Re: ListBox  [new]
Sergey_Volga
Member

Откуда:
Сообщений: 6
Спасибо Вам большое, Анатолий Широков !!!!!
10 авг 05, 22:56    [1776053]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить