Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Parameters в Report Builder

Добрый день!
Как можно использовать case when then в @Parameters ? При использовании нижнего примера, фильтровать не получается
Отчет строится в Report Builder


Например:

SELECT DISTINCT case when [APPROVAL_STATUS] = 'approved' then 'Согласовано'
when [APPROVAL_STATUS] = 'denied' then 'Отказано'
when [APPROVAL_STATUS] = 'pending' then 'В ожидании'
when isnull([APPROVAL_STATUS], ' ') = '' then 'Не указано'
ELSE [APPROVAL_STATUS] end as [APPROVAL_STATUS] FROM [dbo].[SUMMARY]


И возможно ли это?

Спасибо!
Ответ:
o-o
не то паказываете.
свойства самого параметра, а не датасета


все,исправила)
Спасибо! получилось!
Вопрос: Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters

1 искал, читал, вникал, но :(
---
Пример вставки (
переделанный под мою бд, работает:
<?php
$ddb = mysqli_connect('localhost', 'user', '1111', 'mdbase');

/* проверка подключения */
if (!$ddb) {
    printf("Не удалось подключиться: %s\n", mysqli_connect_error());
    exit();
}

$stmt = mysqli_prepare($ddb, "INSERT INTO users VALUES (?, ?, ?, ?, ?)");

echo '<pre>';
print_r ($stmt);
echo '</pre>';

mysqli_stmt_bind_param($stmt, 'dsssd', $uid, $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 147;

/* выполнение подготовленного запроса */
mysqli_stmt_execute($stmt);

printf("%d строк вставлено.\n<br>", mysqli_stmt_affected_rows($stmt));

/* закрываем запрос */
mysqli_stmt_close($stmt);

/* очищаем таблицу CountryLanguage */
//mysqli_query($link, "DELETE FROM users WHERE mail_users='Bavarian'");

printf("%d строк удалено.\n<br><hr>", mysqli_affected_rows($ddb));
//////////////
$rawdata=mysqli_prepare($ddb, "select regid from reg");
echo '<pre>';
print_r ($rawdata);
echo '</pre>';

mysqli_stmt_bind_param($rawdata, 's', $uid_users);

mysqli_stmt_execute($rawdata);
///////////////////////

/* закрываем подключение */
mysqli_close($ddb);

?>

отладка показывает
mysqli_stmt Object
(
    [affected_rows] => 0
    [insert_id] => 0
    [num_rows] => 0
    [param_count] => 5
    [field_count] => 0
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )

    [sqlstate] => 00000
    [id] => 1
)


[param_count] => 5

5 параметров соответствует mysqli_stmt_bind_param($stmt, 'dsssd', $uid, $code, $language, $official, $percent);
---
Я делаю select:
//Еще раз коннект  (но не помогло))
$ddb = mysqli_connect('localhost', 'user', '1111', 'mdbase');
$rawdata=mysqli_prepare($ddb, "select uid_users from users");

//отлдака
echo '<pre>';
print_r ($rawdata);
echo '</pre>';

mysqli_stmt_bind_param($rawdata, 'i', $uid_users);

mysqli_stmt_execute($rawdata);
...
...


В итоге получается, :( что ничего не получается.
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement in /var/www/html/stm.php on line 44


И я выяснил вторичную причину: не совпадает количество переменных и параметров. Потому что [param_count] => 0. До этого шага я дошел, дальше не знаю что и как.
mysqli_stmt Object
(
    [affected_rows] => 0
    [insert_id] => 0
    [num_rows] => 0
    [param_count] => 0
    [field_count] => 1
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )

    [sqlstate] => 00000
    [id] => 2
)

---

тбл и данные:
mysql> select uid_users from users;
+-----------+
| uid_users |
+-----------+
|        11 |
|        12 |
|        38 |
...
...

|        60 |
|        61 |
|        62 |
|        63 |
|        64 |
+-----------+
28 rows in set (0.01 sec)

mysql> 


ВАЖНО! Если будете разъяснять что и почему, то пожалуйста, пишите в процедурном стиле.
Ответ: SharuPoNemnogu,

об этом я слышал. а еще народ говорит, что это скорее для форматирования корректного вывода. Ну... эээ то есть использование только mysqli_real_escape_string не поможет.

И еще одно замечанние (МНЕ от МЕНЯ) select не трогает affected_row.
---
Есть еще вопросы, НО сначала хочу сам разобраться. А то что бы было если бы я написал в этой теме, что "такой-то код выдает варинг..."? Никто не стал бы читать такую тему.
Вопрос: ADP. RowSource with parameters

Что-то я подзабыл.

Пишу в RowSource простой формы

exec ReportForMaster.AlfaInsurance_Medical @type=?, @NoRaiseError=?

и вместо запроса параметров при открытии формы, отгребаю аварийное завершение Access.

Чего мной сделано не так?
Ответ: Ладно, методом научного тыка. Надо так

К сообщению приложен файл. Размер - 48Kb
Вопрос: HKLM\SYSTEM\ControlSet002\Tcpip\Parameters

И снова здравствуйте, форумяне!
Подскажите, какие параметры меняет FirebirdSQL Server Classic v2.5 в указанной ветви реестра (subj). Мне это надо для настройки работы программы в зоне сильных ограничений KIS.
Ответ: Мимопроходящий, да как угодно! Туда, так туда... Моё дело предложить.
Вопрос: dbms_job.submit with parameters

что неправильно сделано?жоб не срабатывает, точнее в ошибку падает
declare
I Integer;
dd date:=sysdate;
 begin 
dbms_job.submit(i,'begin execute immediate '' 
insert
    into a values(:dd) using dd''; end;',
  sysdate);
 
commit;
 
end;
Ответ: Elic,

) ответил на конкретный вопрос...
Вопрос: Oracle BI GoURL between оператор в Navigation Parameters

Всем, HI!

Пытаюсь сделать параметр по дате с оператором between - не получается.

URL формируется такой:
[url=] saw.dll?Go&Path=/Shared/Test/SB2 &Action=Navigate&P0=1&P1=bet&P2=COLUMN.DAT&P3=2+02.07.2017+03.07.2017 [/url]

Подскажите, что ни так делаю?
Ответ: О чудо!!!! Я подобрал необходимую комбинацию!
Строка параметров должна быть такой:
... &Action=Navigate&P0=1&P1=bet&P2="FIELD".DATE&P3=2+"01.07.2017"+"02.07.2017"


Анализ должен содержать фильтр по той же колонке с таким же оператором.
Вопрос: Вложенные With

Не обладает ли кто тайным знанием: как во вложенном With обратиться к полю/методу ВЕРХНЕГО уровня

' Здесь - не работает
.Parameters.Item("@Line").value = str

  With New ADODB.Command
    .CommandText = "Finances.accTicketsRC_FileLineLoad"
    .CommandType = adCmdStoredProc
    .CommandTimeout = 120
    .NamedParameters = True
    .ActiveConnection = CurrentProject.Connection
    .Parameters.Append .CreateParameter("Return", adInteger, adParamReturnValue)
    .Parameters.Append .CreateParameter("@File", adVarWChar, adParamInput, 512, file)
    .Parameters.Append .CreateParameter("@Line", adVarWChar, adParamInput, 4000)

     ' Здесь - работает
    .Parameters.Item("@Line").value = str
   
    With New ADODB.stream
      .Charset = "Windows-1251"
      .Type = adTypeText
      .Open
      .LoadFromFile file
      While Not .EOS
        str = .ReadText(adReadLine)
        Debug.Print str

        ' Здесь - не работает
        .Parameters.Item("@Line").value = str

        .Execute Options:=adExecuteNoRecords
      Wend
      .Close
    End With
    
  End With
Ответ:
Akina
Fully qualified. А поскольку With New ADODB.Command после себя следов не оставляет - то при твоём подходе никак. См. .


Да ладно те. Вот .Parameters - это объект и для него я могу написать

  Set cmd = New ADODB.Command
  With cmd
    .CommandText = "Finances.accTicketsRC_FileLineLoad"
    .CommandType = adCmdStoredProc
    .CommandTimeout = 120
    .NamedParameters = True
    .ActiveConnection = CurrentProject.Connection
    .Parameters.Append .CreateParameter("Return", adInteger, adParamReturnValue)
    .Parameters.Append .CreateParameter("@File", adVarWChar, adParamInput, 512, file)
    .Parameters.Append .CreateParameter("@Line", adVarWChar, adParamInput, 4000)
    
    Set p = .Parameters
   
    With New ADODB.stream
      .Charset = "Windows-1251"
      .Type = adTypeText
      .Open
      .LoadFromFile file
      While Not .EOS
        str = .ReadText(adReadLine)
        'Debug.Print str
        p.Item("@Line").value = str
        cmd.Execute Options:=adExecuteNoRecords
      Wend
      .Close
    End With
    
  End With
  Set cmd = Nothing


Понятно, что разницы немного. Но как бы с .Execute придумать?
Вопрос: Добавление параметров в хранимую процедуру VS C#

Я ввожу значение в текстбокс и это значение пытаюсь добавить в параметры хранимой процедуры что бы выполнить запрос.
Проблема в том, что когда я пытаюсь добавить больше одного параметра то у меня перестают выводится значения. Как нужно добавить параметры что бы выводились значения?
Когда раскоментировал 2 парметра

Когда только один параметр

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private static void AddUser(string surname, string name, string middlename, string Diagnos, DateTime dateofbirth)
        {
adapter = new SqlDataAdapter("sp_Select4", connection);
            adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            //adapter.SelectCommand.Parameters.AddWithValue("@Фамилия", tbox1.Text);
//ПАРАМЕТРЫ РАБОТАЮТ ТОЛЬКО ПО ОТДЕЛЬНОСТИ 
 
            adapter.SelectCommand.Parameters.Add("@Фамилия", SqlDbType.NVarChar, 50);
            adapter.SelectCommand.Parameters["@Фамилия"].Value = tbox1.Text;
 
            //adapter.SelectCommand.Parameters.Add("@Имя", SqlDbType.NVarChar, 50);
            //adapter.SelectCommand.Parameters["@Имя"].Value = tbox2.Text;
 
            //adapter.SelectCommand.Parameters.Add("@Отчество", SqlDbType.NVarChar, 50);
            //adapter.SelectCommand.Parameters["@Отчество"].Value = tbox3.Text;
 
            //adapter.SelectCommand.Parameters.Add("@Диагноз", SqlDbType.NVarChar, 50);
            //adapter.SelectCommand.Parameters["@Диагноз"].Value =  tbox4.Text;
}
private void toolStripButton14_Click(object sender, EventArgs e)//Кнопка найти 
        {
            AddUser(surname, name, middlename, Diagnos, dateofbirth);
 
            adapter.Fill(SelectRequest2);
            commandBuilder = new SqlCommandBuilder(adapter);
            bindingSource7.DataSource = SelectRequest2;
            bindingNavigator7.BindingSource = bindingSource7;
            dataGridView7.DataSource = bindingSource7;
            
        }
Ответ: или на клиенте сделать
SQL
1
2
IF TRIM(tbox2.Text) <> '' THEN
  adapter.SelectCommand.Parameters["@Имя"].Value = TRIM(tbox2.Text);
или в процедуре
SQL
1
IF @Имя IS NOT NULL AND @Имя <> ''
Добавлено через 36 секунд
ибо '' и NULL не одно и то же
Вопрос: Update - обновить данные в одной колоне или в другой

Здравствуйте, эксперты.
Код SQL
1
2
3
4
5
6
7
8
UPDATE Conf.IImmobile
        SET
            ID=@ID
            Descr = @Descr
        WHERE
            ID= @ID
            OR
            Descr=@Descr
Код на VB.NET, в таблице есть три параметра: switch,id,descr.
Первый условием хочу проверить: Если параметр(1 т.е. ИД) он отличается от -1, то я добавляю всё.
Если параметр(1) отличается от ИД который был передан (для обновления) то я его обновляю с сохранением описания.
Код vb.net
1
2
3
4
5
6
7
8
9
10
11
If parameters(1).Value <> Core.DBConversion.DefaultIntNull Then
                parameters(0).Value = 1
                parameters(1).Value = ID
                parameters(2).Value = Descr
            End If
 
            If parameters(1).Value <> ID Then
                parameters(0).Value = 2
                parameters(1).Value = ID
                parameters(2).Value = Descr
            End If
Это правильный код?
Ответ: Если я правильно понимаю, во второй IF мы не зайдем, потому что в первом IF-е: parameters(1).Value = ID
Вопрос: ADO.Command: как запустить хранимку из схемы, отличной от .dbo

На сервере MS SQL есть хранимая проедура ИмяПроцедуры, созданая в схеме, отличной от .dbo
У процедуры есть три входных параметра. На сервере процедура работает без проблем.
Хочу запустить процедуру на выполнение из проекта .adp а вксес. Процедура

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub test()
Dim cnx As ADODB.Connection
Dim cmd As ADODB.Command
On Error GoTo ErrHandler
    Set cmd = CreateObject("ADODB.Command")
    Set cnx = CurrentProject.Connection
    cmd.ActiveConnection = cnx
    cmd.CommandType = 4
    cmd.CommandText = "ИмяПроцедуры"
    cmd.Parameters.Refresh
    cmd.Parameters(1) = 7
    cmd.Parameters(2) = "start"
    cmd.Parameters(3) = 1
    cmd.Execute
    Exit Sub
ErrHandler:
Dim errCmd
    Debug.Print Err.Number, Err.Description
    For Each errCmd In cnx.Errors
        Debug.Print Err.Number, Err.Description
    Next errCmd
End Sub
дорабатывает без ошибок до оператора cmd.Execute, на cmd.Execute выдает ошибку
-2147217900 Не удалось найти хранимую процедуру "adm_ins_РольОбъект".
ок, дописываю имя схемы перед именем процедуры:
Visual Basic
1
cmd.CommandText = "ИмяСхемы.ИмяПроцедуры"
Теперь процедра спотыкаетя уже на операторе cmd.Parameters(1) = 7, с ошибкой
3265 В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру.
Как это побороть?

Добавлено через 6 минут
А если сказать команде, что она не процедура, а строка - все работает:

cmd.CommandType = adCmdText
cmd.CommandText = "ИмяСхемы.ИмяПроцедуры 7, 'start', 1"
cmd.Execute
Спрашивается, чего ей в первом варианте кода не хватает?
Ответ:
Сообщение от snipe
База.схема.Хранимка
А вот таким способом не только не начала запускаться хранимка из другой схемы, но и перестали запускаться даже хранимки из схемы dbo. Ошибка на операторе
Visual Basic
1
cmd.Parameters(1) = 7
, диагностика
3265 В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру.