Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

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

 
Марат   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.052 c
1-1083433797
Leos
2004-05-01 21:49
2004.05.16
Прокрутка


1-1083333761
European
2004-04-30 18:02
2004.05.16
Panel не изменяет размеры


3-1082112624
T{}r(l-l
2004-04-16 14:50
2004.05.16
BDE отваливается


4-1080125371
WebErr
2004-03-24 13:49
2004.05.16
Почему у меня программа завершает свою работу не всегда...


1-1083063501
smolin
2004-04-27 14:58
2004.05.16
Функция выделения подстроки