Переменные для имени колонки ms sql

MsSql_DeclareНеобходимо заменить название имени столбца на значение из переменной.  То есть брать название столбца из переменной.

В Ms SQL  это можно сделать достаточно просто через  exec().

Итак стандартный запрос

SELECT '001' AS [CODLIS]
, DATAVAL
, stuff(tbl.COD, 10, 2, 'DL') AS CODART
, tbl.DL AS PR
FROM
tbl
WHERE
tbl.DL > 0

Как видно текст DL встречается аж в 3 местах. Вот его нам надо заменить на свою переменную, чтобы меняя только значение переменной менять и имя колонки и текст в функции stuff.

Делается это так.

Создаём 2 переменные. В одной будет имя колонки, в другой сам запрос.

 

DECLARE @str varchar(3000),@nameCol varchar(2); 

Устанавливаем значения. Не забываем про двойной апостроф

Set  @nameCol = 'DL'

Set @str = 'SELECT ''001'' AS [CODLIS]
     , ''03.28.2015 0:00:00'' AS DATAVAL
     , stuff(tbl.COD, 10, 2, '''+@nameCol+''') AS CODART
     , '+@nameCol+' AS PR
FROM
 tbl
WHERE
 '+@nameCol+' > 0'

Теперь запускаем наш запрос используя exec()

exec(@str)

Вот собственно и все, меняя значение переменной @nameCol меняем и сам запрос и имена столбцов.

Jscript Группировка в ассоциативном массиве с подсчетом

ListingЕсть данные: цвет. У каждого цвета свой размер (может повторятся).

Необходимо сделать группировку по цвету и повторяющиеся размеры посчитать.

Вывести все это.

Для начала создадим массив наших данных. Нам для это надо создать массив массивов.

var array_res = new Array();
.....// тут цикл в котором получаю данные
array_res[i]=new Array ();
array_res[i].push(color,fasA+'x'+fasL+';'); //Получается вида [["Красный","716x396"],[....,....]]
....
//запускаем процедуру для группирования
  print_Group(array_res);

Сама функция для группировки с комментариями. Тут используются ассоциативные массивы.

function print_Group(arr_res){
  gr = [];  
   // Для каждого цвета собираем  его размеры 
for (var i = 0; i < arr_res.length; i++) {
  if (gr[arr_res[i][0]]== null ) {gr[arr_res[i][0]]="";}
   gr[arr_res[i][0]] += arr_res[i][1];
  }  

// группируем и считаем элементы
for (var k in gr) {
 // Выводим цвет 
document.write('<tr><td colspan="2"><b>'+ k + '</b></td></tr>');
c = []; 
t_c = gr[k].split(';'); //получаем массив всех размеров 
for (var i = 0; i < t_c.length-1; i++) {
 if (c[t_c[i]]== null) c[t_c[i]] = 0; 
  c[t_c[i]] +=1; // счетчик одинаковых размеров 
}
 //выводим размер и его количество
   for (var t in c) {
 document.write('<tr><td colspan="2">'+t + '= ' + c[t] +' шт'+ '</td></tr>'); 
   }
 }
}

Вот такая группировка получается в итоге.

group_array

C# Разрезать изображение на части

before_Cut
Необходимо вырезать часть  картинки из pictureBox и показать на форме.

Сначала в битмапе формируем нужную  часть, затем передаем в picturebox.

Код:

public Bitmap CutImage(Bitmap src, Rectangle rect)
        {
           
            Bitmap bmp = new Bitmap(src.Width, src.Height); //создаем битмап

            Graphics g = Graphics.FromImage(bmp); 

            g.DrawImage(src, 0, 0, rect, GraphicsUnit.Pixel); //перерисовываем с источника по координатам

            return bmp;
        }

В обработчике нажатия кнопки пишем следующее:

private void button1_Click(object sender, EventArgs e)
        {
            Image temp = pictureBox1.Image;// берем картинку или Image.FromFile("D:\\123.png");
            Bitmap src = new Bitmap(temp, pictureBox1.Width, pictureBox1.Height); 
            // Задаем нужную область вырезания (отсчет с верхнего левого угла)
            Rectangle rect = new Rectangle(new Point(0, 0), new Size(pictureBox1.Width/2, pictureBox1.Height/2));
            // передаем в нашу функцию   
            Bitmap CuttedImage = CutImage(src, rect);
            // результат изображение передаем на форму 
            pictureBox1.Image = CuttedImage;
        }

Получилось  вот такое изображение после вырезания.

Cut_image

cxTreeList — свой стиль для определенных строк

cxTreeListСреда DELPHI.
В компоненте cxTreeList  понадобилось для определенных значений (больше 0 ) использовать свой стиль .

Для этого можно использовать событие cxTreeList1StylesGetContentStyle.

 

Сначала создаем свои стили.  Например в этом случае нам нужно 2 стиля.  Стиль обычный и  стиль с жирный шрифтом.

Затем пишем следующий код в cxTreeList1StylesGetContentStyle.

 procedure TMForm.cxTreeList1StylesGetContentStyle(
  Sender: TcxCustomTreeList; AColumn: TcxTreeListColumn; ANode: TcxTreeListNode;
  var AStyle: TcxStyle);
begin
       //в этом примере значение для сравнения во второй колонке
        if VarIsNull(ANode.Values[cxTreeList1Column2.ItemIndex])  then Exit; 
       
        if ANode.Values[cxTreeList1Column2.ItemIndex] > 0  then
          begin
            AStyle := cxstyl1; // стиль для >0 
           end
       else
          AStyle := cxstyl2; // стиль для = 0
End

получаем результат

TreeList

 

 

Ошибка SQL Server blocked access to STATEMENT

SQL Запрос на изменение данных UPDATEЕсли при попытке загрузить из внешнего файла возникают такие ошибки:

SQL Server blocked access to STATEMENT ‘OpenRowset/OpenDatasource’ of component ‘Ad Hoc Distributed Queries’ because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of ‘Ad Hoc Distributed Queries’ by using sp_configure. For more information about enabling ‘Ad Hoc Distributed Queries’, see «Surface Area Configuration» in SQL Server Books Online. SQL.sql 1 1

OLE DB provider ‘Microsoft.Jet.OLEDB.4.0’ cannot be used for distributed queries because the provider is configured to run in single-threaded apartment mode. SQL.sql 7 19

Cannot create an instance of OLE DB provider «MSDASC» for linked server «(null)». SQL.sql 1 1

Значит не настроен MSSQL.

Необходимо выполнить следующие строки:

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
USE [master]
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

После успешного выполнения этих строк все должно работать нормально.