holeras
Дата: Пятница, 25.08.2017, 16:25 |
Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
Добрый день! Имею вот такой запрос, помогите разобраться.
ActiveWorkbook.Worksheets.Add ActiveSheet.Name = "get" With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _ "ODBC;DSN=PostgreSQL35W;DATABASE=;SERVER=;PORT=;UID=;;SSLmode=disable;ReadOnly=0;Protocol=7.4;FakeOid" _ ), Array( _ "Index=0;ShowOidColumn=0;RowVersioning=0;ShowSystemTables=0;Fetch=100;UnknownSizes=0;MaxVarcharSize=255;MaxLongVarcharSize=8190;D" _ ), Array( _ "ebug=0;CommLog=0;UseDeclareFetch=0;TextAsLongVarchar=1;UnknownsAsLongVarchar=0;BoolsAsChar=1;Parse=0;ExtraSysTablePrefixes=;LFCo" _ ), Array( _ "nversion=1;UpdatableCursors=1;TrueIsMinus1=0;BI=0;ByteaAsLongVarBinary=1;UseServerSidePrepare=1;LowerCaseIdentifier=0;GssAuthUse" _ ), Array("GSS=0;XaOpt=1")), Destination:=Range("$A$1")).QueryTable .CommandText = Array( _ "WITH session_data AS (" & Chr(13) & "" & Chr(10) & " SELECT s.id AS s_id, players.name AS player_name, players.""id"" AS player_id, players.bets AS bets" & Chr(13) & "" & Chr(10) & " FROM sessions AS s, jsonb_to_recordset(s.data::jsonb->'players') AS " _ , _ "players( id text, ""name"" text, ""idDec"" text, ""bets"" json)" & Chr(13) & "" & Chr(10) & " WHERE s.id = 6206" & Chr(13) & "" & Chr(10) & ")," & Chr(13) & "" & Chr(10) & " player_data AS (" & Chr(13) & "" & Chr(10) & " SELECT s_id AS session_id, player_name, player_id, bets" & Chr(13) & "" & Chr(10) & " FROM session_data" & Chr(13) & "" & Chr(10) & " " _ , _ " WHERE player_id = '' " & Chr(13) & "" & Chr(10) & " )" & Chr(13) & "" & Chr(10) & "SELECT z.key AS name, z.value::json->'amount' AS amount" & Chr(13) & "" & Chr(10) & "FROM player_data AS p, json_each_text(p.bets) AS z" _ ) .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = "PostgreSQL35W_1" .Refresh BackgroundQuery:=False End With Sheets("get").Select Range("C2").Select ActiveCell.FormulaR1C1 = "=VLOOKUP([@name],stavka,2,0)" Range("C3").Select ActiveWindow.SmallScroll Down:=111 Sheets("data").Select End Sub
Как заменять WHERE s.id = 6206, чтоб значение 6206 или любое другое бралось из ячейки B2 листа data Спасибо за ответ.
Добрый день! Имею вот такой запрос, помогите разобраться.
ActiveWorkbook.Worksheets.Add ActiveSheet.Name = "get" With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _ "ODBC;DSN=PostgreSQL35W;DATABASE=;SERVER=;PORT=;UID=;;SSLmode=disable;ReadOnly=0;Protocol=7.4;FakeOid" _ ), Array( _ "Index=0;ShowOidColumn=0;RowVersioning=0;ShowSystemTables=0;Fetch=100;UnknownSizes=0;MaxVarcharSize=255;MaxLongVarcharSize=8190;D" _ ), Array( _ "ebug=0;CommLog=0;UseDeclareFetch=0;TextAsLongVarchar=1;UnknownsAsLongVarchar=0;BoolsAsChar=1;Parse=0;ExtraSysTablePrefixes=;LFCo" _ ), Array( _ "nversion=1;UpdatableCursors=1;TrueIsMinus1=0;BI=0;ByteaAsLongVarBinary=1;UseServerSidePrepare=1;LowerCaseIdentifier=0;GssAuthUse" _ ), Array("GSS=0;XaOpt=1")), Destination:=Range("$A$1")).QueryTable .CommandText = Array( _ "WITH session_data AS (" & Chr(13) & "" & Chr(10) & " SELECT s.id AS s_id, players.name AS player_name, players.""id"" AS player_id, players.bets AS bets" & Chr(13) & "" & Chr(10) & " FROM sessions AS s, jsonb_to_recordset(s.data::jsonb->'players') AS " _ , _ "players( id text, ""name"" text, ""idDec"" text, ""bets"" json)" & Chr(13) & "" & Chr(10) & " WHERE s.id = 6206" & Chr(13) & "" & Chr(10) & ")," & Chr(13) & "" & Chr(10) & " player_data AS (" & Chr(13) & "" & Chr(10) & " SELECT s_id AS session_id, player_name, player_id, bets" & Chr(13) & "" & Chr(10) & " FROM session_data" & Chr(13) & "" & Chr(10) & " " _ , _ " WHERE player_id = '' " & Chr(13) & "" & Chr(10) & " )" & Chr(13) & "" & Chr(10) & "SELECT z.key AS name, z.value::json->'amount' AS amount" & Chr(13) & "" & Chr(10) & "FROM player_data AS p, json_each_text(p.bets) AS z" _ ) .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = "PostgreSQL35W_1" .Refresh BackgroundQuery:=False End With Sheets("get").Select Range("C2").Select ActiveCell.FormulaR1C1 = "=VLOOKUP([@name],stavka,2,0)" Range("C3").Select ActiveWindow.SmallScroll Down:=111 Sheets("data").Select End Sub
Как заменять WHERE s.id = 6206, чтоб значение 6206 или любое другое бралось из ячейки B2 листа data Спасибо за ответ. holeras
Сообщение отредактировал holeras - Пятница, 25.08.2017, 16:47
Ответить
Сообщение Добрый день! Имею вот такой запрос, помогите разобраться.
ActiveWorkbook.Worksheets.Add ActiveSheet.Name = "get" With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _ "ODBC;DSN=PostgreSQL35W;DATABASE=;SERVER=;PORT=;UID=;;SSLmode=disable;ReadOnly=0;Protocol=7.4;FakeOid" _ ), Array( _ "Index=0;ShowOidColumn=0;RowVersioning=0;ShowSystemTables=0;Fetch=100;UnknownSizes=0;MaxVarcharSize=255;MaxLongVarcharSize=8190;D" _ ), Array( _ "ebug=0;CommLog=0;UseDeclareFetch=0;TextAsLongVarchar=1;UnknownsAsLongVarchar=0;BoolsAsChar=1;Parse=0;ExtraSysTablePrefixes=;LFCo" _ ), Array( _ "nversion=1;UpdatableCursors=1;TrueIsMinus1=0;BI=0;ByteaAsLongVarBinary=1;UseServerSidePrepare=1;LowerCaseIdentifier=0;GssAuthUse" _ ), Array("GSS=0;XaOpt=1")), Destination:=Range("$A$1")).QueryTable .CommandText = Array( _ "WITH session_data AS (" & Chr(13) & "" & Chr(10) & " SELECT s.id AS s_id, players.name AS player_name, players.""id"" AS player_id, players.bets AS bets" & Chr(13) & "" & Chr(10) & " FROM sessions AS s, jsonb_to_recordset(s.data::jsonb->'players') AS " _ , _ "players( id text, ""name"" text, ""idDec"" text, ""bets"" json)" & Chr(13) & "" & Chr(10) & " WHERE s.id = 6206" & Chr(13) & "" & Chr(10) & ")," & Chr(13) & "" & Chr(10) & " player_data AS (" & Chr(13) & "" & Chr(10) & " SELECT s_id AS session_id, player_name, player_id, bets" & Chr(13) & "" & Chr(10) & " FROM session_data" & Chr(13) & "" & Chr(10) & " " _ , _ " WHERE player_id = '' " & Chr(13) & "" & Chr(10) & " )" & Chr(13) & "" & Chr(10) & "SELECT z.key AS name, z.value::json->'amount' AS amount" & Chr(13) & "" & Chr(10) & "FROM player_data AS p, json_each_text(p.bets) AS z" _ ) .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .PreserveColumnInfo = True .ListObject.DisplayName = "PostgreSQL35W_1" .Refresh BackgroundQuery:=False End With Sheets("get").Select Range("C2").Select ActiveCell.FormulaR1C1 = "=VLOOKUP([@name],stavka,2,0)" Range("C3").Select ActiveWindow.SmallScroll Down:=111 Sheets("data").Select End Sub
Как заменять WHERE s.id = 6206, чтоб значение 6206 или любое другое бралось из ячейки B2 листа data Спасибо за ответ. Автор - holeras Дата добавления - 25.08.2017 в 16:25
AndreTM
Дата: Пятница, 25.08.2017, 16:35 |
Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация:
501
±
Замечаний:
0% ±
2003 & 2010
Исправьте : оформите в своем сообщении код тегом #
[vba]
Код
... & " WHERE s.id = " & ActiveWorkbook.Sheets("data").[B2] & ...
[/vba]
Исправьте : оформите в своем сообщении код тегом #
[vba]
Код
... & " WHERE s.id = " & ActiveWorkbook.Sheets("data").[B2] & ...
[/vba]
AndreTM
Skype: andre.tm.007 Donate: Q iwi: 9517375010
Ответить
Сообщение Исправьте : оформите в своем сообщении код тегом #
[vba]
Код
... & " WHERE s.id = " & ActiveWorkbook.Sheets("data").[B2] & ...
[/vba]
Автор - AndreTM Дата добавления - 25.08.2017 в 16:35
holeras
Дата: Пятница, 25.08.2017, 17:18 |
Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация:
0
±
Замечаний:
0% ±
Excel 2010
AndreTM, Спасибо за совет, ну тут так получается что это запрос в БД да еще и sql. И когда делаю ссылку в запросе sql, то пишет ошибки. Может как то через переменную объявить значение? а переменную брать из ячейки?
AndreTM, Спасибо за совет, ну тут так получается что это запрос в БД да еще и sql. И когда делаю ссылку в запросе sql, то пишет ошибки. Может как то через переменную объявить значение? а переменную брать из ячейки? holeras
Ответить
Сообщение AndreTM, Спасибо за совет, ну тут так получается что это запрос в БД да еще и sql. И когда делаю ссылку в запросе sql, то пишет ошибки. Может как то через переменную объявить значение? а переменную брать из ячейки? Автор - holeras Дата добавления - 25.08.2017 в 17:18
_Igor_61
Дата: Пятница, 25.08.2017, 18:33 |
Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 504
Репутация:
90
±
Замечаний:
0% ±
Excel 2007
Здравствуйте! Может, так? [vba]Код
Dim Peremennaya As String Peremennaya = Range("B2")
[/vba]
Здравствуйте! Может, так? [vba]Код
Dim Peremennaya As String Peremennaya = Range("B2")
[/vba] _Igor_61
Ответить
Сообщение Здравствуйте! Может, так? [vba]Код
Dim Peremennaya As String Peremennaya = Range("B2")
[/vba] Автор - _Igor_61 Дата добавления - 25.08.2017 в 18:33
AndreTM
Дата: Пятница, 25.08.2017, 20:19 |
Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация:
501
±
Замечаний:
0% ±
2003 & 2010
holeras , ещё раз. Оформите код в вашем посте тэгом # (код VBA), а не спойлером. То, что у вас там какой-то запрос к какой-то БД - это равнопарллельно для VBA. В конкретном приведенном вами коде - вы формируете массив из текстовых строк. Который передаете потом запросу. Соответственно, вам надо именно в текст запроса добавить вместо "числа-константы, нарисованной прямо в тексте" - некое значение с листа. Естественно, дописав его в нужное место нужной строчки, там, где у вас находится это самое "6206". И я вам и показал тот кусочек кода, который должен стоять там, где у вас находится эта самая строчка с вашим числом - чтобы вместо конкретного числа в строке запроса оказалось "в текстовом виде вписанное прямо в строку запроса!) то значение, которое вы указываете в ячейке... Вы хоть поняли, что вообще означал данный вам ответ: [vba]Код
... & " WHERE s.id = " & ActiveWorkbook.Sheets("data").[B2] & ...
[/vba]? Или под спойлер не смотрели? Или вы ждали, что кто-то здесь будет разбирать весь ваш запрос (тем более, не имея ни текста вашего кода в файле, ни возможности проверить исполнение запроса)...
holeras , ещё раз. Оформите код в вашем посте тэгом # (код VBA), а не спойлером. То, что у вас там какой-то запрос к какой-то БД - это равнопарллельно для VBA. В конкретном приведенном вами коде - вы формируете массив из текстовых строк. Который передаете потом запросу. Соответственно, вам надо именно в текст запроса добавить вместо "числа-константы, нарисованной прямо в тексте" - некое значение с листа. Естественно, дописав его в нужное место нужной строчки, там, где у вас находится это самое "6206". И я вам и показал тот кусочек кода, который должен стоять там, где у вас находится эта самая строчка с вашим числом - чтобы вместо конкретного числа в строке запроса оказалось "в текстовом виде вписанное прямо в строку запроса!) то значение, которое вы указываете в ячейке... Вы хоть поняли, что вообще означал данный вам ответ: [vba]Код
... & " WHERE s.id = " & ActiveWorkbook.Sheets("data").[B2] & ...
[/vba]? Или под спойлер не смотрели? Или вы ждали, что кто-то здесь будет разбирать весь ваш запрос (тем более, не имея ни текста вашего кода в файле, ни возможности проверить исполнение запроса)...AndreTM
Skype: andre.tm.007 Donate: Q iwi: 9517375010
Ответить
Сообщение holeras , ещё раз. Оформите код в вашем посте тэгом # (код VBA), а не спойлером. То, что у вас там какой-то запрос к какой-то БД - это равнопарллельно для VBA. В конкретном приведенном вами коде - вы формируете массив из текстовых строк. Который передаете потом запросу. Соответственно, вам надо именно в текст запроса добавить вместо "числа-константы, нарисованной прямо в тексте" - некое значение с листа. Естественно, дописав его в нужное место нужной строчки, там, где у вас находится это самое "6206". И я вам и показал тот кусочек кода, который должен стоять там, где у вас находится эта самая строчка с вашим числом - чтобы вместо конкретного числа в строке запроса оказалось "в текстовом виде вписанное прямо в строку запроса!) то значение, которое вы указываете в ячейке... Вы хоть поняли, что вообще означал данный вам ответ: [vba]Код
... & " WHERE s.id = " & ActiveWorkbook.Sheets("data").[B2] & ...
[/vba]? Или под спойлер не смотрели? Или вы ждали, что кто-то здесь будет разбирать весь ваш запрос (тем более, не имея ни текста вашего кода в файле, ни возможности проверить исполнение запроса)...Автор - AndreTM Дата добавления - 25.08.2017 в 20:19