Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Вытащить на label данные из бд. Добавлено: 09.09.10 13:26  

Автор вопроса:  goodwen
Здравствуйте, я пишу на vb6, у меня есть бд в виде Excel файла, где есть 2 столбца, первый "obj" для слов, другой "meta-obj" для описания этого слова в определённом формате. Мне нужно ввести слово в textbox и чтобы всё описание этого слова вытащилось в label на форме. При чём описание для каждого слова в столбце "meta-obj" занимает несколько строк вниз и поэтому мне нужно найти введённое слово в бд и вывести всё описание для этого слова (и не выводить описание другого слова, которое идёт ниже), как мне это можно сделать?

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #1 Добавлено: 09.09.10 16:21
То у тебя в excel такая структура(условно)
    A B
1 [obj] [meta-obj]
2 obj_name1 meta1_1
3 <пусто> meta1_2
4 <пусто> meta1_3
5 obj_name2 meta2_1

Такое трудно назвать базой данных :)
Можно конечно SELECT * .. и перебором в цикле, но даже в этом случае в "базе" должен быть столбец индекса.
Может проще задействовать объектную модель excel.

Ответить

Номер ответа: 2
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #2 Добавлено: 09.09.10 19:20
Eugy, да, у меня именно такая структура, а как мне эту объектную модель использовать? Мне там обязательно надо именно в laabel вытащить эти данные:
meta1_1
meta1_2
meta1_3

Ответить

Номер ответа: 3
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #3 Добавлено: 09.09.10 19:25
Eugy, хотя по сути можно же сделать и такую структуру:
A B
1 [obj] [meta-obj]
2 obj_name1 meta1_1
3 obj_name1 meta1_2
4 obj_name1 meta1_3
5 obj_name2 meta2_1
 По сути то ничего не измениться, а как мне в этом случае с помощью select, введя obj_name1 вывести на label только?:
meta1_1
meta1_2
meta1_3

Ответить

Номер ответа: 4
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #4 Добавлено: 09.09.10 20:24
Изменится, можно будет написать sql-запрос
  1. Dim findstr As String
  2.     Dim rec As ADODB.Recordset
  3.     findstr = "obj_name1"
  4.     Set rec = conn.Execute("SELECT [meta-obj] FROM [imj$] WHERE [obj] = '" & findstr & "'")
  5.     If Not rec Is Nothing Then
  6.         rec.MoveFirst
  7.         Label1.Caption = rec.GetString(, , , vbCr)
  8.     Else
  9.         Label1.Caption = "<no data>"
  10.     End If


И все.
А вообще, по уму, должны быть три таблицы, первая содержит obj и его уникальный индекс,
вторая- meta-obj и уник. индекс, а третяя осуществляет связку этих индексов.
И разумеется все это не в excel, а хотя бы в access, где "специально-обученный" драйвер базы следит за целостностью связок.

Ответить

Номер ответа: 5
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #5 Добавлено: 09.09.10 22:12
Да,вот еще что..
Если искомая строка содержит произвольные символы типа кавычек, запятых и пр.,
тогда можно создать запрос с параметром.
  1.  
  2.     Dim cmd As New ADODB.Command
  3.     Set cmd.ActiveConnection = conn
  4.     cmd.CommandText = "SELECT [meta-obj] FROM [imj$] WHERE [obj]= ?"
  5.     Set rec = cmd.Execute(, Array(findstr))


Удачи.

Ответить

Номер ответа: 6
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #6 Добавлено: 09.09.10 22:13
Eugy, Спасибо всё заработало, только вот этот участок кода:
  1.  
  2. Else
  3. Label1.Caption = "<no data>"


почему то не работает, пишет что BOF, или EOF имеет значение true, либо текущая запись удалена, Как мне можно это исправить?

Ответить

Номер ответа: 7
Автор ответа:
 Eugy



Вопросов: 0
Ответов: 73
 Профиль | | #7 Добавлено: 09.09.10 22:20
проверкой рекордсета :)
if rec.EOF or rec.BOF then...

Ответить

Номер ответа: 8
Автор ответа:
 goodwen



Вопросов: 26
Ответов: 65
 Профиль | | #8 Добавлено: 09.09.10 23:36
Eugy, Спасибо за помощь, всё заработало.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам