Добавление колонки в таблице (ADO)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Добавление колонки в таблице (ADO)

Сообщение Sirik » 14.05.2005 (Сб) 10:35

есть табличка, делаю выборку и получаю рекордсет

можно как-небудь добавить/удалить колонки рекордсете?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.05.2005 (Сб) 11:12

Нет. Можно создать новый рекордсет и скопировать в него данные исключая ненужные колонки. А еще можно просто сделать выборку без ненужных колонок.
Лучший способ понять что-то самому — объяснить это другому.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 14.05.2005 (Сб) 11:15

встречный вопрос: как сделать выборку без ненужных колонок?

проблемма вот в чём: у меня в таблице есть поля от 26 до 46.
надо вывести эти данные, есть одно но: каждая строка должна быть: либо от 26 до 39, либо 35-42, либо 39-46, либо 40-46...
в отчете есть RptTextBox'ы, если я назначаю вот так:
Код: Выделить всё
    DataReport1.Sections("Section1").Controls("Text1").DataField = "26"
    .....


то все поля не влазят на лист.

что делать? (если конечно кто-то что-то понял)

зы2. я тут выложил пример, как должен выглядеть отчёт
Вложения
Отчёт.zip
(18.96 Кб) Скачиваний: 21
Последний раз редактировалось Sirik 14.05.2005 (Сб) 11:27, всего редактировалось 1 раз.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.05.2005 (Сб) 11:26

А как вообще делается выборка? RTFM TSQL.
Select [26], [27], [28] ... (и т.д) From Table1
Лучший способ понять что-то самому — объяснить это другому.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 14.05.2005 (Сб) 11:29

посмотрите предыдущее сообщение, я добавил пример

зы. емелось в виду не строки, а столбцы

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 14.05.2005 (Сб) 12:00

Посмотрел. Теперь вообще ничерта не понимаю.
Лучший способ понять что-то самому — объяснить это другому.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 14.05.2005 (Сб) 12:03

есть таблица, в ней есть столбцы от 26 до 46
есть линии, для каждой есть свой интервал (например: от 26 до 39, или 35 до 42)

надо вывести данный отчёт.

естественно, что для линии, у которой интервал от 26 до 39, не надо показывать значения после поля 39

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 14.05.2005 (Сб) 12:08

кидай сюда свою mdb-шку с этой таблицей - будем разбираться, а то что-то из твоих объяснений ничего не понятно

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 14.05.2005 (Сб) 12:16

таблица t_Operations
Вложения
1.zip
(22.86 Кб) Скачиваний: 18

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 14.05.2005 (Сб) 12:30

у тебя только 29 линия прописана в таблице операций
если честно, совершенно непонятно почему такая структура данных

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 14.05.2005 (Сб) 12:32

я для краткости базы вырезал все данные

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 14.05.2005 (Сб) 12:33

и не ясно, что же ты хочешь в итоге для этой 29 линии получить в запросе?

29 XA ARNO Я идиот! Убейте меня, кто-нибудь!???

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 14.05.2005 (Сб) 12:36

ок, давай по порядку:
запрс такой: выбрать все линии, у которых дата 11.11.2005

допустим под этот запрос "попали" линии, у коротых интервалы не совпадают (26-39 и 40-46). вот в чём и проблемма

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 14.05.2005 (Сб) 13:19

может все-таки разобраться со структурой таблицы операций и вынести из нее все поля 26-46 в отдельную таблицу, например:

LineID CodeID CodeValue
29 35 100
29 36 100
...
30 26 2500
30 27 0
....

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 14.05.2005 (Сб) 13:24

нет, так не получется

Алексей К.
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 419
Зарегистрирован: 12.05.2004 (Ср) 9:41
Откуда: Ульяновск

Сообщение Алексей К. » 14.05.2005 (Сб) 14:41

Может я не так понял, но если у тебя небольшая градация с линиями (типа у 29 пределы [25,36]) то в цикле в результируещем запросе по каждой строке - что-то вроде:
Код: Выделить всё

do until rs.eof
    Если линия 29 то
        for each столбец in твой_набор_записей.fields
           if val(столбец.name)>=25 and val(столбец.name)<36 then
             выводишь в отчет или в грид
           end if       
        next столбец
    end if
   .....
rs.movenext
loop
Либо если градация большая, то запросом вынимаешь для каждой линии верхний и нижний пределы.
Как вариант, может и медленно будет, попробуй...

[/syntax]

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.05.2005 (Сб) 15:49

Вообще-то все примитивно...
Я как пользователь ActiveReports говорю ;)

Как бы делал я: обычный запрос, возвращающий все поля записи, а в событии Detail_Format присваивал бы значение нужного поля.

Ну и для Grid-a примерно так-же - воспользовался бы событием FetchData своего Janus GridEx-a. ;)

-----
Другой вариант - сформировать и заполнить значениями свой Recordset, который потом и использовать в Grid-e и отчете, например так:

Код: Выделить всё
Public Sub T()
    Dim r As New ADODB.Recordset, rr As New ADODB.Recordset, _
        i As Long, j As Long, k As Long, kk As Long, ks As Long
   
    r.Open "SELECT L.f_Article, L.f_Name, L.f_Min, L.f_Max, O.* FROM t_Line L INNER JOIN t_Operations O ON L.f_Counter=O.f_Line " _
        & "WHERE f_Date=#5/13/2005# " _
        & "ORDER BY 1, 2", CurrentProject.AccessConnection, adOpenStatic, adLockReadOnly
   
    With rr.Fields
        .Append "Article", r(0).Type, r(0).DefinedSize, adFldUnknownUpdatable
        .Append "Name", r(1).Type, r(1).DefinedSize, adFldUnknownUpdatable
        For i = 1 To 21
            .Append "N" & i, adInteger, , adFldUnknownUpdatable
        Next i
            .Append "S", adInteger, , adFldUnknownUpdatable
    End With
    rr.Open
   
    Do Until r.EOF
        j = 0
        rr.AddNew
        rr(0) = r(0)
        rr(1) = r(1)
        k = r!f_Max - r!f_Min + 1
        If kk < k Then kk = k
        For i = r!f_Min To r!f_Max
            j = j + 1
            rr("N" & j) = i
        Next i
        rr.Update
        rr.AddNew: j = 0: ks = 0
        For i = r!f_Min To r!f_Max
            j = j + 1
            k = r(CStr(i))
            rr("N" & j) = k
            ks = ks + k
        Next i
        rr!S = ks
        rr.Update
        r.MoveNext
    Loop
   
    If Not rr.EOF Then
        rr.MoveFirst
        Do Until rr.EOF
            Debug.Print rr(0), rr(1)
            For k = 1 To kk
                Debug.Print rr("N" & k);
            Next k
            Debug.Print rr!S
            rr.MoveNext
        Loop
    End If
End Sub
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 15.05.2005 (Вс) 9:23

ещё раз:
мне нужен отчёт вот такого вида
ARNO - NERO
35 36 37 38 39 40 41 42
10 10 20 20 20 30 40 10

BLUAIR - NERO
29 30 31 32 33 34 35 36
11 11 21 34 234 40 30 50

...

не форме отчёт я создал поля, которым DataField = "необходимый размер"

вот и получается фигня: у одной линии интервал от 35 до 42, у другой 29-36

как быть?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 16.05.2005 (Пн) 7:01

Sirik писал(а):ещё раз:
мне нужен отчёт вот такого вида


Ну я тебе для такого и написал. Ты смотрел?
Там ведь выводится все как в твоем отчете было нарисовано...

не форме отчёт я создал поля, которым DataField = "необходимый размер" вот и получается фигня: у одной линии интервал от 35 до 42, у другой 29-36 как быть?[/quote]

Проблемы нет - число значащих колонок известно - просто скрывай лишние.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 16.05.2005 (Пн) 10:03

понятно.
объясни только строку:
Код: Выделить всё
r.Open "SELECT L.f_Article, L.f_Name, L.f_Min, L.f_Max, O.* FROM t_Line L INNER JOIN t_Operations O ON L.f_Counter=O.f_Line " & " ORDER BY 1, 2"


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 170

    TopList