Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

Разбивка текста   Найти похожие ветки 

 
Марат   (2004-04-21 12:21) [0]

Здравствуйте, мастера. У меня есть такой вопрос. В одном из справочников хочется сделать поле Answer (Char(50)), которое будет содержать список ID-шек из другого справочника. Например: ,0301,0302,0604. Теперь после считывания получаю переменную ССС:=FieldByName("Answer").AsString (пусть не покажется странным, что ID-String). Теперь мне надо выделить каждый ID в отдельную переменную (допустим в массив) для дальнейшего использования в другом запросе, но я не знаю как вытащить значения между запятыми и как посчитать количество (3) этих ID-шек?


 
Vlad ©   (2004-04-21 12:24) [1]


> Марат   (21.04.04 12:21)  

См. ф-ции Pos, Copy.
А вобще, сдается мне что ты ерундой занимаешься.
Обычно вводят детайл-таблицу и в ней хранят ID один-ко-многим


 
Курдль ©   (2004-04-21 12:24) [2]

Не придумывайте себе геморрой - создайте таблицу по всем правилам "многие-ко-многим".


 
Reindeer Moss Eater ©   (2004-04-21 12:29) [3]

... and somefield in "(" + AnswerFieldText + ")"


 
Марат   (2004-04-21 12:54) [4]

А вот про это ... and somefield in "(" + AnswerFieldText + ")"

можно объяснить подробнее?


 
Reindeer Moss Eater ©   (2004-04-21 12:55) [5]

select * from mytable where myfield in ("1","2","3","4","5")


 
Users   (2004-04-21 12:57) [6]

На MSSQL функция CHARINDEX


 
MOA ©   (2004-04-21 13:13) [7]

Не делайте так! Делайте так:
Vlad ©   (21.04.04 12:24) [1]
Курдль ©   (21.04.04 12:24) [2]
Ещё раз - так как Вы хотите - не делайте! Это самая наихудшая идея, которая только может быть! Если Вы сделаете так, как хотите - ваше отношение не будет даже в 1 нормальной форме -> в будущем Вас ожидает громадный геморрой с этой таблицей. Собственно, рн уже есть;)
Удачи!


 
Reindeer Moss Eater ©   (2004-04-21 13:15) [8]

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


 
MOA ©   (2004-04-21 13:22) [9]

>Нормализация - не самоцель, а средство облегчить жизнь
А абсолютно согласен с Вами. Но у мне кажется, что спрашивающий имеет некий опыт работы с файловыми СУД и пытается перенести освоенные приёмы работы на релационные СУБД. И всё-таки, ПМСМ, отказываться от 1-я нормальной формы (а тут ведь просто справочники) нужно очень хорошо подумав.


 
Марат   (2004-04-21 13:25) [10]

У меня получилось через Pos. Теперь возник другой вопрос.
В итоге получилось так: все ID-шки записал в массив A. A[0]="0301",A[1]="0302",A[2]="0604" и количество получилось Cou=3.
Но возникла проблема в следующем запросе:
with Query do begin
sql.clear;
sql.add("select ...");
for i:=0 to Cou-1 do begin
sql.add(and AT.AnswTypID=:pP"+inttostr(i));
end;
...
for i:=0 to Cou-1 do begin
ParamByName("pP"+inttostr(i)).asstring:=A[i];
end;
Чую, что неправильно, а где не знаю?


 
Reindeer Moss Eater ©   (2004-04-21 13:26) [11]

Кто ж спорит с тем, что подумать нужно?
Я же спорю с тем, что

Не делайте так! Делайте так:
...
Ещё раз - так как Вы хотите - не делайте!


 
MOA ©   (2004-04-21 13:28) [12]

На Марат   (21.04.04 13:25) [10]
2 Reindeer Moss Eater  Ну вот, а Вы говорите - через чур категорично.


 
Марат   (2004-04-21 13:33) [13]

Я конечно дико извиняюсь, что вмешиваюсь, но у меня возник уже другой вопрос. Повторяю у меня проблема с вышеуказанным запросом.


 
Reindeer Moss Eater ©   (2004-04-21 13:39) [14]

Есть проблема - хорошо.
А вопрос у тебя есть?


 
Марат   (2004-04-21 13:44) [15]

возникла проблема в следующем запросе:
with Query do begin
sql.clear;
sql.add("select ...");
for i:=0 to Cou-1 do begin
sql.add("and AT.AnswTypID=:pP"+inttostr(i));
end;
...
for i:=0 to Cou-1 do begin
ParamByName("pP"+inttostr(i)).asstring:=A[i];
end;
По логике вроде так, а на деле не проходит?


 
KSergey ©   (2004-04-21 13:48) [16]

А зачем в динамическом запросе использовать параметры??
Может просто сразу весь текст нормально сформировать

with Query do begin
sql.clear;
sql.add("select ...");
for i:=0 to Cou-1 do begin
sql.add(and AT.AnswTypID="+inttostr(A[i]) + " ");
end;


 
Reindeer Moss Eater ©   (2004-04-21 13:49) [17]

То, что у тебя проблема - все уже поняли.

Вопрос давай!


 
KSergey ©   (2004-04-21 13:50) [18]

> [16] KSergey ©   (21.04.04 13:48)

Нудачно подчеркивание добавил....
Читать так:

with Query do begin
sql.clear;
sql.add("select ...");
for i:=0 to Cou-1 do begin
sql.add(and AT.AnswTypID="+inttostr(A[i]) + " ");
end;


(про пробел между and не надо забывать! А вообще- есть отладчик, в нем надо смотреть формируемый текст и проверять его в QueryAnalizer - так его отладить существенно проще)


 
KSergey ©   (2004-04-21 13:51) [19]

Ну еще аопстофик пропустил - ну да ладно ;)


 
Марат   (2004-04-21 14:00) [20]

Сделал вот так: sql.add(and AT.AnswTypID="+inttostr(A[i]) + " ");
RecordCount получается 0. Может еще чего-то не то?


 
Марат   (2004-04-21 14:06) [21]

Вся беда в том, что массив А[0..500] of variant;
т.к. считываемое поле типа Char (не я делал и изменить уже невозможно). И получается inttostr("0302")=302, а в таблице нужно именно "0302" по другому не выбирается.


 
Reindeer Moss Eater ©   (2004-04-21 14:07) [22]

А массив - то же не твоя работа?


 
Курдль ©   (2004-04-21 14:15) [23]

Марат, а Вы упорный! :)
Последний раз взываю к Вашему разуму! Откажитесь от упадочной идеи подобной реализации! А если это просто эксперимент над своим упорством - хотя бы найдите СУБД попроще (при всей моей нелюбви к MSSQLServer-у - это довольно-таки умная система и не любит стрельбы из пушки по воробьям).
Так вот, то, что Вы пытаетесь изобразить, давно придумано, использовано, отвергнуто и забыто. Называется это Хэш-таблицы. Реализованы, попробую вспомнить навскидочку, в Clarion.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.034 c
14-1083162405
reticon_
2004-04-28 18:26
2004.05.16
Поздравьте меня :)


3-1082106946
Smile))
2004-04-16 13:15
2004.05.16
Конвертация БД


7-1081145534
Clawhammer
2004-04-05 10:12
2004.05.16
Установка Time Zone...


8-1069399145
truntaev
2003-11-21 10:19
2004.05.16
как быстро сравнить 2 объекта типа tbitmap


1-1083301978
ivc_andr
2004-04-30 09:12
2004.05.16
сканировать сеть





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский