Query ForData

Sau khi query trả về DataTable trong DataSet

I. Ta cần cập nhật lại giá trị 1 cột nào đó, hãy sử dụng Query ForData
II. Build ra 1 đoạn text với các vòng lặp


I. Ta cần cập nhật lại giá trị 1 cột nào đó, hãy sử dụng Query ForData


1. Kiểu <Type>ForData</Type>
2. Nguồn DataTable
  <Src>Tên bảng trong DataSet</Src>
3. Điều kiện lọc
  Thay vì cập nhật toàn bộ bảng ghi thì cập nhật 1 dòng nào đó
<Cmd>Where</Cmd>

4. Cột cập nhật
* Trong quá trình for dữ liệu sẽ cập nhật lại tên cột với giá tri mới

<FieldUpdate>
Tên_Cột_Cần_Cập_Nhật_1<pr&/>Lệnh<pr&/>Tên_Cột_lấy_dữ_liệu<pr&/>Lệnh_where
Tên_Cột_Cần_Cập_Nhật_2<pr&/>Lệnh<pr&/>Tên_Cột_lấy_dữ_liệu<pr&/>Lệnh_where
</FieldUpdate>


Giải thích tham số:
Tên_Cột_Cần_Cập_Nhật_1:Tên cột trong DataTable cần cập nhật dữ liệu
Lệnh:Lệnh để tạo ra giá trị, có thể là 1 chuổi hay 1 lệnh, có chữ {0} để lấy giá trị hiện tại.
Tên_Cột_lấy_dữ_liệu: nếu để trống sẽ lấy tên cột Tên_Cột_Cần_Cập_Nhật_1
Lệnh_where:Tên query (tên table)<pr-/>Điều kiện where
 

Một số ví dụ hay gặp
** Cập nhật giá trị vào cột hiện tại đã có

Ví dụ: Cập nhật thêm cột họ tên có chữ đầu tiên là: Ho Ten:

<FieldUpdate>
HoTen<pr&/>HO TEN: {0}
</FieldUpdate>

Giải thích: {0} là lấy giá trị hiện tại của cột HoTen
--> Cột HoTen được nối thêm chữ HO TEN: giá trị hiện tại

<FieldUpdate>
HoTen<pr&/>Trần Văn A
</FieldUpdate>
 -> Toàn bộ các bảng ghi cập nhật cột HoTen có giá trị là Trần Văn A


** Thêm cột mới và cập nhật giá trị vào cột mới
Ví dụ:
<ColumnAdd>
TenDVT2/-/String
</ColumnAdd>
<FieldUpdate>
TenDVT2<pr&/>{0}<pr&/>TenDVT
</FieldUpdate>

--> Cột TenDVT2 được thêm vào DataTable và cập nhật giá trị từ cột TenDVT

Ví dụ: trong bảng có cột HoTen, muốn cập nhật cột HoTen này sang không dấu thì sẽ lấy chính cột đó
     Không cần nhập Nếu_lấy_cột_khác (để trống)

** Thêm cột mới và cập nhật giá trị có điều kiện (where) với table khác tỏng DataSet
Ví dụ:
<Query>
<ID>Q1</ID>
<Src>12</Src>
<Type>Sql</Type>
<Cmd>   
SELECT Top 10  ID_HangHoa,ID_HangHoa_DVT,Sum(tbBanHangChiTiet.ThanhTien_Tong) as Tien
FROM         tbBanHangChiTiet INNER JOIN
                      tbBanHang ON tbBanHangChiTiet.ID_BanHang = tbBanHang.ID_BanHang
Where Month(tbBanHang.DateCreate)=@Thang AND Year(tbBanHang.DateCreate)=@Nam
GROUP BY   ID_HangHoa,ID_HangHoa_DVT                
ORDER BY Sum(tbBanHangChiTiet.SoLuong) DESC;
            
</Cmd>
<SqlParameter>
Thang<pr&/><iif-D>Url:thang</iif-D>
Nam<pr&/><iif-D>Url:nam</iif-D>
</SqlParameter>
</Query>
<Query>
<ID>Q2</ID>
<Src>12</Src>
<Type>Sql</Type>
<Cmd>   
SELECT     tbHangHoa_DVT.ID_HangHoa_DVT, tbHangHoa_DVT.ID_HangHoa, tbHangHoa_DVT.TenDVT, tbHangHoa_DVT.QuyDoi
                       ,tbHangHoa.Ten_HangHoa
FROM         tbHangHoa_DVT INNER JOIN
                      tbHangHoa ON tbHangHoa_DVT.ID_HangHoa = tbHangHoa.ID_HangHoa           
</Cmd>
</Query>

<Query>
<ID>Q3</ID>
<Src>Q1</Src>
<Type>ForData</Type>
<ColumnAdd>
Ten/-/String
</ColumnAdd>
<FieldUpdate>
Ten<pr&/>{0}<pr&/>Ten_HangHoa<pr&/>Q2<pr-/>ID_HangHoa_DVT={rec:ID_HangHoa_DVT:rec}
</FieldUpdate>
</Query>

--> Cột Ten được thêm vào DataTable
       Tại mỗi row vòng lặp sẽ lấy cột Ten_HangHoa ở Query Q2 với điểu kiện
                 ID_HangHoa_DVT=giá trị cột ID_HangHoa_DVT tại Q1 



** Thêm <g></g> vào lệnh

   Tham khảo tại chuỗi cú pháp lệnh   (Chú ý đối {g: thành <g> và :g} thành </g>)           

Ví dụ: chuyển ký tự có dấu thành không dấu dạng seo
     Giá trị: Xin chào -> xin_chao

<Query>
<ID>NhatKyDatTiec</ID>
<Src>cnSQL_HDND</Src>
<Type>Sql</Type>
<Cmd>
SELECT _SYS_KEY,Sanh,TinhTrang,Day(NgayThueMatBang) as Ngay,Month(NgayThueMatBang) as Thang
, (SoBan_Man+SoBan_Chay) as SoBan
,NgayThueMatBang_Gio
, CASE WHEN NgayThueMatBang_Gio>=11 THEN 'c' ELSE 't' END as Buoi
FROM   tbHopDong                     
Where
  Year(NgayThueMatBang) =@Nam AND Month(NgayThueMatBang) =@Thang
</Cmd>
<SqlParameter>
Nam<pr&/><iif-D>Url:Nam</iif-D>
Thang<pr&/><iif-D>Url:Thang</iif-D>
</SqlParameter>
</Query>

<Query>
<ID>BoDau</ID>
<Src>NhatKyDatTiec</Src>
<Type>ForData</Type>
<ColumnAdd>
TinhTrang_Seo/-/String
</ColumnAdd>
<FieldUpdate>
TinhTrang_Seo<pr&/><g>text/->seo/->{0}</g><pr&/>TinhTrang
</FieldUpdate>
</Query>


II. Build ra 1 đoạn text với các vòng lặp
* Cấu trúc
<StringAdd>
<HtmlS>Đoạn đầu</HtmlS>
<HtmlItemFirst>Nếu dòng đầu (có thể để trống, ko cần tham số)</HtmlItemFirst>
<HtmlItem>vòng lặp</HtmlItem>
<HtmlItemLast>
Nếu dòng cuối(có thể để trống, ko cần tham số)</HtmlItemLast>
<HtmlE>
Đoạn cuối</HtmlE>
<NameVar>Html</NameVar>
</StringAdd>

 
Lệnh dùng: 
{rec:COLUMN_NAME:rec},{enter}

Tham khảo lệnh rec

Ví dụ:

<Query>
<ID>Q1</ID>
<Src>cnSQL_HDND</Src>
<Type>Sql</Type>
<Cmd>
SELECT ORDINAL_POSITION, COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH FROM  
            INFORMATION_SCHEMA.TABLES t INNER JOIN INFORMATION_SCHEMA.COLUMNS c
          ON t.TABLE_NAME = c.TABLE_NAME
            WHERE c.TABLE_NAME=@TABLE_NAME
</Cmd>
<SqlParameter>
TABLE_NAME<pr&/><iif-D>Url:TABLE_NAME</iif-D>
</SqlParameter>
</Query>
<Query>
<ID>TaoJS</ID>
<Src>Q1</Src>
<Type>ForData</Type>
<StringAdd>
<HtmlS><script></HtmlS>
<HtmlItemFirst>{rec:COLUMN_NAME:rec}FFFF{enter}</HtmlItemFirst>
<HtmlItem>{rec:COLUMN_NAME:rec},{enter}</HtmlItem>
<HtmlItemLast>{rec:COLUMN_NAME:rec}LLL{enter}</HtmlItemLast>
<HtmlE></script></HtmlE>
<NameVar>Html</NameVar>
</StringAdd>

</Query>
<Query>
<ID>Q4</ID>
<Type>Xml_Remove_DataTable</Type>
<Src>Q1</Src>
</Query>
 

Ví dụ: tạo hàm check Data

<Query>
<ID>Q1</ID>
<Src>cnSQL_HDND</Src>
<Type>Sql</Type>
<Cmd>
SELECT ORDINAL_POSITION, COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH FROM  
            INFORMATION_SCHEMA.TABLES t INNER JOIN INFORMATION_SCHEMA.COLUMNS c
          ON t.TABLE_NAME = c.TABLE_NAME
            WHERE c.TABLE_NAME=@TABLE_NAME And DATA_TYPE='nvarchar' AND COLUMN_NAME In(select String from dbo.Split(@COLUMN_NAME , ','))
</Cmd>
<SqlParameter>
TABLE_NAME<pr&/><iif-D>Url:TABLE_NAME</iif-D>
COLUMN_NAME<pr&/><iif-D>Url:COLUMN_NAME</iif-D>
</SqlParameter>
</Query>
<Query>
<ID>TaoJS</ID>
<Src>Q1</Src>
<Type>ForData</Type>
<StringAdd>
<HtmlS>function checkData(){{enter}</HtmlS>
<HtmlItem>
if( $("input[name={rec:COLUMN_NAME:rec}]").val().length > {rec:CHARACTER_MAXIMUM_LENGTH:rec})
    {
        alert('{rec:COLUMN_NAME:rec} vuot qua {rec:CHARACTER_MAXIMUM_LENGTH:rec}!');
        return false;
    }{enter}

</HtmlItem>
<HtmlE>return true; }</HtmlE>
<NameVar>Html</NameVar>
</StringAdd>
</Query>
<Query>
<ID>Q4</ID>
<Type>Xml_Remove_DataTable1</Type>
<Src>Q1</Src>
</Query>




Trong html nạp ta có thể dùng
CSS:

<link href="/adminxml/Query_Do.aspx?name=NhaHang/HopDong_Load_CauTruc&out=txt&TABLE_NAME=tbHopDong&_contenttype=text/css" rel="stylesheet">
Đối với css cần thêm _contenttype  (file html mới hiểu lệnh css)

Javascript:
Chú ý: bỏ HtmlS và HtmlE
<script src="/adminxml/Query_Do.aspx?name=NhaHang/HopDong_Load_CauTruc&out=txt&TABLE_NAME=tbHopDong" type="text/javascript"></script>

 

Ví dụ Query buil css:
<includeQuery>
find_query:NhaHang/HopDong_TinhTrang
</includeQuery>
<Query>
<ID>TaoCSS</ID>
<Src>Q1</Src>
<Type>ForData</Type>
<StringAdd>
<HtmlItem>
.tinhtrang_{rec:MoTa<sysR:SeoText:sysR>:rec}{{rec:Css_Bgr/-/background-color:{0};:rec}{rec:Css_Bgr/-/color:{0};:rec}}
</HtmlItem>
<NameVar>Html</NameVar>
</StringAdd>
</Query>
<Query>
<ID>Q4</ID>
<Type>Xml_Remove_DataTable</Type>
<Src>#0</Src>
</Query>
 

 

 




Mục liên quan: