Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Запрос


Рекомендуемые сообщения

Здраствуйте работаю в аксесе и возникла такая необходимость написать програмку на бейсике в принципе ничего сложного только одно но адо выполнять запросы sql а как это сделать пока не нашол уже полтора часа мучаюсь нашол два варианта QueryDef но как написано он работает с запросами которые уже есть в базе данных а мне надо програмно генерировать запросы(просто суть работы идет в сравнении,а это лутче как мне кажеться запросами делать) и второй способ это Command хотел с ним попробовать но вообще ничего не понял. Как вы можете посоветовать выполнять запросы в бейсике. Если не сложно приведите пример или дайте ссылку

P.S. подобных тем я не нашол

Изменено пользователем Delphi
Ссылка на комментарий
Поделиться на другие сайты

Я использую QueryTable

Создать запрос

Private Sub MakeQuery()Call MQuery(Range("A1"), "test")End SubPrivate Sub MQuery(Dest As Range, QN As String)Dim ConnectionString As StringDim SQLString As StringConnectionString = "ODBC;DSN=Oracle;" + _				   "Server=<имя базы>;"SQLString = "select ..."With ActiveSheet.QueryTables.Add( _		Connection:=ConnectionString, _		Destination:=Dest, _		Sql:=SQLString)		.FieldNames = False		.RefreshStyle = xlInsertDeleteCells		.RowNumbers = False		.FillAdjacentFormulas = False		.RefreshOnFileOpen = False		.HasAutoFormat = False		.BackgroundQuery = False		.TablesOnlyFromHTML = True		.SavePassword = False		.SaveData = True		.Name = QN		.RefreshEnd WithEnd Sub

Обновить запрос

Public Const FullApplicationName = "ExcelQuery"Public ErrorSub As StringPublic ErrorMsg As StringPublic Function RQuery(SheetName As String, Query As String, SqlText As String) As BooleanOn Error GoTo ErrorLabelApplication.ScreenUpdating = FalseSet S = ActiveSheetSheets(SheetName).ActivateWith Sheets(SheetName).QueryTables(Query)		UserName = GetSetting(FullApplicationName, "Login", "UserName")		LogOnForm.UserName.Value = UserName		If UserName <> "" Then			LogOnForm.Password.SetFocus		End If		If LogOnForm.Password.Value = "" Then			Application.ScreenUpdating = True			LogOnForm.Show			Application.ScreenUpdating = False		End If		SaveSetting FullApplicationName, "Login", "UserName", LogOnForm.UserName.Value		If LogOnForm.CancelButton.Tag = 1 Then			LogOnForm.Password.Value = ""			Exit Function		End If		.Connection = "ODBC;DSN=Oracle;" + _					"UID=" + LogOnForm.UserName.Value + ";" + _					"PWD=" + LogOnForm.Password.Value + ";" + _					"Server=" + LogOnForm.DBase.Value		.Sql = SqlText		Application.DisplayAlerts = False		.Refresh BackgroundQuery:=False		Application.DisplayAlerts = TrueEnd WithResultFlag = TrueGoTo EndLabelErrorLabel:LogOnForm.Password.Value = ""ErrorSub = "RQuery " & SheetName & " " & QueryErrorMsg = Err.DescriptionErrorProcResultFlag = FalseEndLabel:S.ActivateApplication.ScreenUpdating = TrueRQuery = ResultFlagEnd FunctionPrivate Sub ErrorProc()	x = MsgBox("Error" + ErrorSub + "'" + Chr(13) + ErrorMsg, , "Error")End Sub
Ссылка на комментарий
Поделиться на другие сайты

yuriks насколько я понял это создаеться и сохраняеться запрос, в первом случае а во втором его мы просто изменяем тоесть перезаписываем?

DSN= Oracle что означает?

мне так почемуто кажеться что это указывает что база данных находиться на сервере оракла если я правильно понял

Если есть такая возможность чтобы выполнить запрос не сохраняя его как запрос в базе данных то подскажите такую возможность

Изменено пользователем Delphi
Ссылка на комментарий
Поделиться на другие сайты

yuriks насколько я понял это создаеться и сохраняеться запрос, в первом случае а во втором его мы просто изменяем тоесть перезаписываем?

Создается об'єкт в Excel-е со своими свойствами, которые можно менять.

DSN= Oracle что означает?

мне так почемуто кажеться что это указывает что база данных находиться на сервере оракла если я правильно понял

Ето имя источника данных ODBC

Пример для Oracle но я делал и для MySql и для Excel. (любое)

Если есть такая возможность чтобы выполнить запрос не сохраняя его как запрос в базе данных то подскажите такую возможность

Он не сохраняется в базе, только в Excel-е

Ссылка на комментарий
Поделиться на другие сайты

Я нашол решение своей проблемы может комуто ещё понадобиться при решении создаеться один запрос который должен быть а дальше такой текст

Sub intel()

Dim db As Database

Dim rs As Recordset

Dim qd As QueryDef

Dim str As String ' будет сама строка запроса

Dim arr1() As String'обявляем масив для первой таблицы

Dim i As Integer

Dim con As Integer

i = 0

Set db = Application.CurrentDb ' открываем нащу бд

str = "SELECT Выделено FROM [ТЭ-1-1_Выбрка_СтТовар]GROUP BY Выделено" 'присваиваем переменной текст запроса

Set qd = db.QueryDefs("test") ' указываем с каким запросом работать

qd.SQL = str 'меняем сам текст запроса

Set rs = qd.OpenRecordset(dbOpenDynaset) 'выполняем сам запрос

con = rs.RecordCount

rs.MoveFirst

Do

ReDim arr1(i)

arr1(i) = rs.Fields(0).Value

rs.MoveNext

i = i + 1

Loop While Not rs.EOF

End Sub

Такая схема работает для запросов которые возвращяют записи

Изменено пользователем Delphi
Ссылка на комментарий
Поделиться на другие сайты

работал по такому методу нормально пока не понадобилось выплнить запрос на добавление данных и как оказалось такая схема не подходить, может кто знает как можно выполниться запрос который не будет возвращять данных?

Ссылка на комментарий
Поделиться на другие сайты

у меня получаеться такой фрагмент из модуля

Set db = Application.CurrentDb

str = "insert into [ТЭ-1-1_Выборка_СтТовар](ключ, выделено, сттовар, признак)VALUES(1357, 'Товар0001' , 'Товар-1' , False)"

Set qd = db.QueryDefs("test")

qd.SQL = str

Set rs = db.Execute(str)

при компиляции выдает ошибку следующего типа

Expected Function or variable

выполняю этотже запрос в как обычный запрос выполняеться нормально подскажите что здесь неправильного

Изменено пользователем Delphi
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...