AI muốn lập trình DLL cho Excel và các loại bằng Delphi thì xem video này nhé!

Liên hệ QC

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,652
Được thích
10,140
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Lần chỉnh sửa cuối:
Cái này thì mình hổng biết, mạnh dowload từ đâu có thể người ta biên soạn còn thiếu hoặc........, còn theo mình mình sài cái gì vọ trang đó kiếm là chắc ăn
tại muốn đọc tài liệu để có cái nhìn tổng quát về các hàm trong delphi ... và sử dụng khi cần thiết đó mà ... chắc mấy tay đó làm lâu ròi nên nó thiếu cái hàm đó hihihihihi
 
Upvote 0
ý mạnh hỏi nhiều ấy 1 list toàn bộ hàm mà Delphi có ấy
Như file mạnh úp đó cái Hàm bạn cho sao ko thấy

Không thể liệt kê hết được đâu. Delphi không phải VBA hay VB6. Nó như biển lớn rất nhiều loại cá. Chỉ có thể nhớ một số cái thông dụng, phát sinh nhu cầu khác thì tìm trên trang web của Delphi hoặc các kênh hỗ trợ khác thôi.
 
Upvote 0
Các bạn cho mình hỏi chút
Mình viết 1 hàm thấy chạy tốt ra kết qua như mong đợi nhưng sao nó cứ báo lỗi theo hình như sau là sao ??!!
hay mình phải xài thêm hàm gì nữa chuyển đổi nó vv
ERROR.PNG
 
Upvote 0
Upvote 0
Cai nya la Insert Into hay select.
Híc mạnh đưa có 1 dòng sao mà đoán ra muốn làm gì
cai sArr[x, y] là số hay String
Chi tiết vầy
Mã:
for x := 1 to lRows do begin
                If (sArr[x, ColFilter]) <>'' Then begin
                    Qry := 'INSERT INTO ' + TableName + ' VALUES(' + IntToStr(x);
                    For y := 1 To lcols do begin                       
                        
                        Qry :=  Qry + ',' +  trim(QuotedStr(sArr[x, y]));                       
                    End;
                    Qry := Qry + ')';
                    Db.Execute(Qry);
                end;
            End;
 
Upvote 0
Chi tiết vầy
Mã:
for x := 1 to lRows do begin
                If (sArr[x, ColFilter]) <>'' Then begin
                    Qry := 'INSERT INTO ' + TableName + ' VALUES(' + IntToStr(x);
                    For y := 1 To lcols do begin                      
                       
                        Qry :=  Qry + ',' +  trim(QuotedStr(sArr[x, y]));                      
                    End;
                    Qry := Qry + ')';
                    Db.Execute(Qry);
                end;
            End;



Mã:
var
tam: String
for x := 1 to lRows do begin

                If (sArr[x, ColFilter]) <>'' Then begin

                    Qry := 'INSERT INTO ' + TableName + ' VALUES(' + IntToStr(x);

                    For y := 1 To lcols do begin                     
if VarIsEmpty(sArr[x, y]) or VarIsNull(sArr[x, y]) then
Tam:=''
else
Tam:=sArr[x, y];
                      

                        Qry :=  Qry + ',' +  trim(QuotedStr(Tam));                     

                    End;

                    Qry := Qry + ')';

                    Db.Execute(Qry);

                end;

            End;
manh thu kiem tra xem no co null không
không biết có dung hông
 
Upvote 0
Mã:
var
tam: String
for x := 1 to lRows do begin

                If (sArr[x, ColFilter]) <>'' Then begin

                    Qry := 'INSERT INTO ' + TableName + ' VALUES(' + IntToStr(x);

                    For y := 1 To lcols do begin                   
if VarIsEmpty(sArr[x, y]) or VarIsNull(sArr[x, y]) then
Tam:=''
else
Tam:=sArr[x, y];
                    

                        Qry :=  Qry + ',' +  trim(QuotedStr(Tam));                   

                    End;

                    Qry := Qry + ')';

                    Db.Execute(Qry);

                end;

            End;
manh thu kiem tra xem no co null không
không biết có dung hông
OK bạn chuẩn ko cần chỉnh hehehehe
Mà nó chỉ lỗi với vài kiểu dữ liệu à
 
Upvote 0
Nhìn thấy mạnh viết cái này là thấy cũng dữ lắm rồi hihihihihihi
nếu lưu 1 mảng từ Excel qua Access thì OK ( Chạy trên Excel)
mà nếu xài ADO lấy lên mảng xong lưu vào Acess thì lỗi đó (cái này chạy trong Access đó)

Có nghĩa cái hàm API đó chuẩn chạy trong môi trường Excel hay Access điều OK
 
Upvote 0
Nhìn thấy mạnh viết cái này là thấy cũng dữ lắm rồi hihihihihihi
Lại phát sinh lỗi rồi
Khi mình thay đổi tham số Cột truyền vào
ColFilter = 1,2,3,.... Thì nó báo lỗi theo Hình ... lại xài hàm gì chuyển nó từ longint sang UnicodeString Bạn nhỉ
excel.PNG
 
Upvote 0
Lại phát sinh lỗi rồi
Khi mình thay đổi tham số Cột truyền vào
ColFilter = 1,2,3,.... Thì nó báo lỗi theo Hình ... lại xài hàm gì chuyển nó từ longint sang UnicodeString Bạn nhỉ
View attachment 207205
Mạnh coi lại mấy bài trước có bài nói về cái này rồi mà

Mạnh phải viết 1 hàm cho nó kiểm tra sArr[x, y]) sau đó đưa về dạng String rồi mới insert

case TVarData(sArr[x, y]).VType of
varDouble:
tmp:=inttostr(sArr[x, y]));
 
Upvote 0
Mạnh coi lại mấy bài trước có bài nói về cái này rồi mà

Mạnh phải viết 1 hàm cho nó kiểm tra sArr[x, y]) sau đó đưa về dạng String rồi mới insert

case TVarData(sArr[x, y]).VType of
varDouble:
tmp:=inttostr(sArr[x, y]));
đến khúc khó ròi đây ... đêm nay suy nghĩ mai tính tiếp
Bạn có cách nào ngắn gọn chỉ giúp Mình ... xong mai mình tính tiếp
Nó chỉ lỗi khi cột có cả số và chữ VD: KM17210039955
Còn nếu chữ hết hay số hết lại OK mà cái tham số Cols đó là lấy số Cột sao nó lại lỗi vậy
 
Lần chỉnh sửa cuối:
Upvote 0
đến khúc khó ròi đây ... đêm nay suy nghĩ mai tính tiếp
Bạn có cách nào ngắn gọn chỉ giúp Mình ... xong mai mình tính tiếp
Nó chỉ lỗi khi cột có cả số và chữ VD: KM17210039955
Còn nếu chữ hết hay số hết lại OK mà cái tham số Cols đó là lấy số Cột sao nó lại lỗi vậy
KM17210039955 Cái này là String mà dựa vào Fiest integer là lỗi liền ah
varOleStr, varString:
Result := Value;

Mạnh có ý tượng tạo mã ID nào hay không cho mình chút xíu với
 
Upvote 0
KM17210039955 Cái này là String mà dựa vào Fiest integer là lỗi liền ah
varOleStr, varString:
Result := Value;

Mạnh có ý tượng tạo mã ID nào hay không cho mình chút xíu với
cái Cols đó là cột truyền tham số vào mà ko liên quan tới Qry
 
Upvote 0
Các bạn cho Mình hỏi chút
Mình viết 1 Hàm Sau nhưng khi truyền tham số là số cột vào hàm mà cột đó kiểu dữ liệu là số và chữ là nó báo lỗi
Could not convert variant of type (UnicodeString) into type (Double)
Mình có chụp hình khoanh các cột màu đỏ đó là nó lỗi kèm theo tham số cột khi truyền vào Hàm
Mã:
procedure TestArray(sArr: OleVariant; ColFilter: Longint); stdcall;
var
   x,y,k          : longint;
   lRows,lCols    : longint;
begin
  try
  lRows := VarArrayHighBound(sArr, 1);
  lCols := VarArrayHighBound(sArr, 2);
    if ColFilter <= lCols then  begin
      for x := 1 to lRows do begin
        //If (sArr[x, ColFilter]) <>'' Then begin //Tùy chọn lọc theo Cột
          ShowMessage ('Số Cột' + IntToStr(ColFilter));
          For y := 1 To lcols do begin
              If (sArr[x, ColFilter]) <>'' Then begin

              end;
          end;
        //end;
      End;
    end;
  except
    on e: exception do
    showmessage(e.message);
  end;
end;
Khai báo sử dụng
Mã:
Public Sub Main_TestArray()
    Dim Arr As Variant, MaxRow As Long
    MaxRow = Sheet1.UsedRange.Rows.Count
    Arr = Sheet1.Range("B7:L" & MaxRow + 5).Value
    Call TestArray(Arr, 2) ''Sẻ lỗi khi thay tham số 2 là 3,4 và 6 là lỗi code còn lại thì ok
End Sub
vậy Mình muốn hỏi có cách nào khắc phục lỗi trên ... Hình lỗi kèm theo và kiểu dữ liệu
excel.PNGKieu du Lieu.PNG
Rất mong các Bạn chỉ dùm
Xin cảm ơn
 
Upvote 0
Các bạn cho Mình hỏi chút
Mình viết 1 Hàm Sau nhưng khi truyền tham số là số cột vào hàm mà cột đó kiểu dữ liệu là số và chữ là nó báo lỗi
Could not convert variant of type (UnicodeString) into type (Double)
Mình có chụp hình khoanh các cột màu đỏ đó là nó lỗi kèm theo tham số cột khi truyền vào Hàm
Mã:
procedure TestArray(sArr: OleVariant; ColFilter: Longint); stdcall;
var
   x,y,k          : longint;
   lRows,lCols    : longint;
begin
  try
  lRows := VarArrayHighBound(sArr, 1);
  lCols := VarArrayHighBound(sArr, 2);
    if ColFilter <= lCols then  begin
      for x := 1 to lRows do begin
        //If (sArr[x, ColFilter]) <>'' Then begin //Tùy chọn lọc theo Cột
          ShowMessage ('Số Cột' + IntToStr(ColFilter));
          For y := 1 To lcols do begin
              If (sArr[x, ColFilter]) <>'' Then begin

              end;
          end;
        //end;
      End;
    end;
  except
    on e: exception do
    showmessage(e.message);
  end;
end;
Khai báo sử dụng
Mã:
Public Sub Main_TestArray()
    Dim Arr As Variant, MaxRow As Long
    MaxRow = Sheet1.UsedRange.Rows.Count
    Arr = Sheet1.Range("B7:L" & MaxRow + 5).Value
    Call TestArray(Arr, 2) ''Sẻ lỗi khi thay tham số 2 là 3,4 và 6 là lỗi code còn lại thì ok
End Sub
vậy Mình muốn hỏi có cách nào khắc phục lỗi trên ... Hình lỗi kèm theo và kiểu dữ liệu
View attachment 207218View attachment 207219
Rất mong các Bạn chỉ dùm
Xin cảm ơn
Mạnh up Cái File excel mẫu của mạnh lên đây xóa bớt dữ liệu đi, để mình kiểm tra cột 2 là kiểu dữ liệu gì, 3,4 là Double rồi, 6 là date, còn cột 2 nhìn không biết nó là kiểu gì
 
Upvote 0
Web KT
Back
Top Bottom