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

Liên hệ QC

Người dùng đang xem chủ đề này

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,842
Được thích
10,337
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Lần chỉnh sửa cuối:
Duyệt mảng thì bạn biết mà.
Còn nếu nói về hàm Array của VBA thì tôi không biết trong các phiên bản Delphi mới có hàm giống hoặc gần giống thế hay không. Tôi linh cảm là có cái gì đó gần giống Array của VBA.
Còn trong Delphi 5 thì nếu tôi không lầm thì không có. Nhưng với trường hợp như bạn nêu thì dùng CONST thôi.
Mã:
procedure TForm1.Button2Click(Sender: TObject);
const
  b: array[1..2] of string = ('Data_Nhap', 'Data_Ban');
  d: array[1..2, 1..3] of string = (('hic hic', 'hi hi', 'he he'),
                                    ('bla bla', 'ble ble', 'bli blu'));
var
  r, c: Integer;
begin
  for r := low(b) to high(b) do
    showmessage(b[r]);
  for r := low(d) to high(d) do
    for c := low(d[r]) to high(d[r]) do
      showmessage(d[r, c]);
end;
Em chưa hiểu dòng sau lắm
Mã:
b: array[1..2] of string = ('Data_Nhap', 'Data_Ban');
Vậy nếu ta có 4 SheetName thì khai báo như sau Phải không Anh
Mã:
b: array[1..2, 1..3,1..4] of string = ('Data_Nhap', 'Data_Ban' , 'Data_Ban_3', 'Data_Ban_4');
 
Upvote 0
Mã:
b: array[1..4] of string = ('Data_Nhap', 'Data_Ban' , 'Data_Ban_3', 'Data_Ban_4');

b - mảng 1 chiều
d - mảng 2 chiều
array[1..2, 1..3,1..4] of string - mảng 3 chiều

VBA bạn hiểu thì tại sao Delphi lại không hiểu?

Trong VBA thì b(1 To 2, 1 To 3,1 To 4) là mảng mấy chiều?
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
b: array[1..4] of string = ('Data_Nhap', 'Data_Ban' , 'Data_Ban_3', 'Data_Ban_4');

b - mảng 1 chiều
d - mảng 2 chiều
array
Mã:
[1..2, 1..3,1..4]
of string - mảng 3 chiều

VBA bạn hiểu thì tại sao Delphi lại không hiểu?

Trong VBA thì b(1 To 2, 1 To 3,1 To 4) là mảng mấy chiều?
thì em thấy cái chấm chấm đó mới nhìn chưa hiểu sao ... sau coi kỹ mấy dòng For kia ở dưới xong mới ngờ ngợ ra :D
Em cố giắng học bước qua mấy cái khai báo và sử dụng trong Delphi là em viết code Delphi tạm ok
Mã:
[1..2, 1..3,1..4]
 
Upvote 0
đang viết cái này nó lại liên quan cái khác trong cái mớ bòng bong code rối như tơ vò ...
lang thang kiếm tài liệu học ... thấy link sau có code hay (theo chủ quan của Mạnh)
Nếu bạn nào yêu thích Delphi và dấn thân vào con đường đau khổ chinh phục đỉnh cao của Delphi thì vô linh sau coi he ...
Composants libres/Free Software Components
http://tcoq.free.fr/composants.html
Coi thấy trên Delphi nó cũng viết quicksort na ná như VBA
Mã:
uses Dos;

(* Quicksort: *)

type

OrderPredicate = function (i, j : Integer) : Boolean;
SwapProc = procedure (i, j : Integer);

procedure quicksort(lo, hi: Integer;
                    less : OrderPredicate;
                    swap : SwapProc);
  (* derived from the quicksort routine in QSORT.PAS in the Turbo Pascal
     distribution *)
  procedure sort(l, r: Integer);
    var i, j, k : Integer;
    begin
      i := l; j := r; k := (l+r) DIV 2;
      repeat
        while less(i, k) do inc(i);
        while less(k, j) do dec(j);
        if i<=j then
          begin
            swap(i, j);
            if k=i then k := j (* pivot element swapped! *)
            else if k=j then k := i;
            inc(i); dec(j);
          end;
      until i>j;
      if l<j then sort(l,j);
      if i<r then sort(i,r);
    end(*sort*);
  begin
    if lo<hi then sort(lo,hi);
  end(*quicksort*);
Vui lòng Không Trích dẫn mấy dòng sau Nha ... Vì sẻ phát sinh nhiều vấn đề rối dắm ............... ??!!

Mà sao thấy toàn có vô đây dòm mà ko thấy bạn trẻ nào tham gia khóa học này hết trơn vậy ... phải chăng nó khó quá ... hay muốn học lắm nhưng lãng tránh cái Tôi tiền ẩn của chính mình sao ..vvv -0-0-0-===\.

Mạnh rất mong có nhiều Bạn tham gia thớt này vì sẻ có nhiều câu hỏi phát sinh .... thì sẻ có nhiều câu trả lời hay mà học ....

Kiếm thức đám đông sẻ quy tụ lại và hình thành nên cái triết lý sâu xa, kiến thức đỉnh cao của code .................... vvv
 
Upvote 0
Coi thấy trên Delphi nó cũng viết quicksort na ná như VBA
Bạn có lẽ không hiểu kỹ lắm.
Mỗi một bài toán có thể có nhiều cách giải. Mỗi cách giải nó có từng bước chính. Đó là thuật toán ***. Thuật toán là thuật toán, nó chả phụ thuộc vào ngôn ngữ lập trình nào cả. Cũng cùng một thuật toán giao cho nhiều người thì anh dùng Delphi sẽ implement nó dùng các cấu trúc, câu lệnh của Delhi. Anh dùng VB thì sẽ dùng cấu trúc và câu lệnh của VB để thực hiện cái thuật toán đó. Mà các cấu trúc câu lệnh chính thì trong các ngôn ngữ có triết lý như nhau, cái khác chỉ là chi tiết, vd. cú pháp và những chi tiết khác. Vd. trong VBA sau FOR thì biến điều khiển xác định còn Delphi không đảm bảo nó là xác định.
Khó có thể mong đợi là Quick sort trong Delphi khác với trong VBA, vì thuật toán Quick sort là thuật toán kinh điển, nó có triết lý cụ thể, nên ai implement Quick sort cũng lấy cùng một thuật toán đó để thực hiện. Vì thế mà "giống nhau".

***: Thuật toán thường được biểu diễn dưới dạng liệt kê các điểm chính (1, 2, 3 ...) hoặc sơ đồ khối.
 
Lần chỉnh sửa cuối:
Upvote 0
To @giaiphap
Hôm qua kẹt quá nay mới rảnh chút úp cho he

Mô tả sở qua như sau:
1/ Mạnh xài Windows10_x64 + Office2016_x32

2/ Mạnh có Build Thành 2 bản một bản cho Officex32 và 1 bản cho Officex64

3/ Trên máy mạnh thì nó chạy được file *.dll trong Folder Win32 còn File trong Folder Win64 là lỗi code ... Vì vậy khẳng định Officex32 thì chỉ chạy *.dll Win32

4/ Phiền Bạn nào có xài Officex64 tải về chạy thử File trong Folder Win64 xem nó có chạy tốt ko nhé

5/ Trong File Excel có ghi chi tiết trong đó Mình làm Load File *.dll trong Folder Build nó cho tiện khi build xong mở file Excel lên test code luôn khỏi mất công copy file vào C:\Windows\System32\ *.dll ... Nếu sau này làm thành thư viên rồi thì copy vô đó xóa hết code cho gọn

6/ Có 1 hàm Linktinh đó mục đích là mình thử xem cái *.dll kia nó có chạy hay ko chứ hàm đó ko có giá trị chi cả he :p:D

7/ File VBLibrary.dpr là code đó he ... Chuột Phải\Edit nó mà coi

8/ Tài liệu mạnh có đầy yêu khúc nào mai mốt rảnh coi lại xem cái nào thuận tiện nhất cho người mới nhập môn mạnh úp cho

Cứ từ từ thong thả ta chinh phục nó ... có nhiều tay giáo sư làm 10 mấy năm chưa ra 1 cái đề TÀI khoa học mà mình mới bắt đầu lo chi

9/ Làm phiền @befaint có Officex64 chạy test dùm code trong Folder Win64 và ngược lại xem sao

Học mà chơi ... chơi mà học .... vui vẻ khí thế là tốt
Chào Anh Mạnh !
Thấy chủ đề này hay quá em cũng định học Delphi thử xem. Em download file của Anh về giả nén bị báo lỗi không biết vì sao, Anh kiểm tra lại giúp em với.
Cám ơn Anh !
 

File đính kèm

  • 20-10-2018 12-49-53 PM.png
    20-10-2018 12-49-53 PM.png
    12.6 KB · Đọc: 11
Upvote 0
Chào Anh Mạnh !
Thấy chủ đề này hay quá em cũng định học Delphi thử xem. Em download file của Anh về giả nén bị báo lỗi không biết vì sao, Anh kiểm tra lại giúp em với.
Cám ơn Anh !
bạn tải lại xem nhiều lúc mình cũng bị vậy ... nó lỗi tải file đó
 
Upvote 0
các Bạn cho Mình hỏi 1 chút
khi mình sử dụng Hàm trong trong Delphi Thì khai báo Uses là : comobj rồi mà sao cái Select
Nó báo màu đỏ ... vậy phải khai báo sao khi sử dụng hàm sau
Mã:
Function ExcelEnd(Excel: OleVariant): Boolean;stdcall;
Begin
  Result := True;
  Try
    Excel.Selection.End[xlDown].Select;
    Excel.Selection.End[xlToRight].Select;
  Except
    Result := False;
  End;
End;
 
Upvote 0
Các anh chị nào biết cho em hỏi trong Delphi có control Combobox nào thể hiện được nhiều cột không ?
 
Upvote 0
các Bạn cho Mình hỏi 1 chút
khi mình sử dụng Hàm trong trong Delphi Thì khai báo Uses là : comobj rồi mà sao cái Select
Nó báo màu đỏ ... vậy phải khai báo sao khi sử dụng hàm sau
Mã:
Function ExcelEnd(Excel: OleVariant): Boolean;stdcall;
Begin
  Result := True;
  Try
    Excel.Selection.End[xlDown].Select;
    Excel.Selection.End[xlToRight].Select;
  Except
    Result := False;
  End;
End;
Mời bác xơi!
https://docs.microsoft.com/en-us/office/vba/api/Excel.XlDirection
 
Upvote 0
các Bạn cho Mình hỏi 1 chút
khi mình sử dụng Hàm trong trong Delphi Thì khai báo Uses là : comobj rồi mà sao cái Select
Nó báo màu đỏ ... vậy phải khai báo sao khi sử dụng hàm sau
Mã:
Function ExcelEnd(Excel: OleVariant): Boolean;stdcall;
Begin
  Result := True;
  Try
    Excel.Selection.End[xlDown].Select;
    Excel.Selection.End[xlToRight].Select;
  Except
    Result := False;
  End;
End;

Bạn cần khai báo Unit có tên là "ExcelXP" trên cùng. (Có nhiều phiên bản Excel, nhưng ExcelXP đảm baoar tương thích với mọi phiên bản Excel cao hơn.
Bài đã được tự động gộp:

Các anh chị nào biết cho em hỏi trong Delphi có control Combobox nào thể hiện được nhiều cột không ?

Vụ này nếu tự lập trình phải biết API. Nếu chưa tìm đc component nào thì bạn dùng tạm code lập trình API ở đây
https://stackoverflow.com/questions/29366006/show-multiple-columns-contents-in-a-combobox
Bài đã được tự động gộp:

Tạo Combobox với nhiều cột hiển thị trong Delphi

combobox1.png
combobox2.png


Link tải (không biết có free không?)
http://www.rosinsky.cz/delphi/combobox.html
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn cần khai báo Unit có tên là "ExcelXP" trên cùng. (Có nhiều phiên bản Excel, nhưng ExcelXP đảm baoar tương thích với mọi phiên bản Excel cao hơn.
Bài đã được tự động gộp:



Vụ này nếu tự lập trình phải biết API. Nếu chưa tìm đc component nào thì bạn dùng tạm code lập trình API ở đây
https://stackoverflow.com/questions/29366006/show-multiple-columns-contents-in-a-combobox
Bài đã được tự động gộp:

Tạo Combobox với nhiều cột hiển thị trong Delphi

combobox1.png
combobox2.png


Link tải (không biết có free không?)
http://www.rosinsky.cz/delphi/combobox.html
Em cũng có tham khảo 2 cái này rồi, mà không thấy đẹp lắm hihihihihihi
 
Upvote 0
MÌnh có tập viết 1 Sub sau để chạy test xem sao ... thấy chạy tốt ....
tuy nhiên mình chưa hiểu lắm về cách sử dụng này keo là chi và sử dụng trong trường hợp nào là hiệu quả nhất ??!!
cách khai báo sử dụng vậy có điều chỉnh gì thêm ....

Mong các bạn chỉ dùm
Mã:
procedure ConnecTionExcel;stdcall;
var
  Excel    : TExcelApplication;
  wSheet   : TExcelWorksheet;
begin
  try
    Excel := TExcelApplication.Create (nil);
    Excel.Connect; 
    wSheet := TExcelWorksheet.Create(nil);
    wSheet.ConnectTo(Excel.WorkSheets[1] as _Worksheet); 
    wSheet.Range['C1',EmptyParam].Value2 := 'Kiều Văn Mạnh';
    wSheet.Range['C1',EmptyParam].Copy(wSheet.Range['A1',EmptyParam]);
    Excel.Disconnect;
    Excel.Destroy;
    Excel.Free;
    Excel := nil;
  except
    on e: exception do
      showmessage(e.message);
  end;
end;
 
Upvote 0
MÌnh có tập viết 1 Sub sau để chạy test xem sao ... thấy chạy tốt ....
tuy nhiên mình chưa hiểu lắm về cách sử dụng này keo là chi và sử dụng trong trường hợp nào là hiệu quả nhất ??!!
cách khai báo sử dụng vậy có điều chỉnh gì thêm ....

Mong các bạn chỉ dùm
Mã:
procedure ConnecTionExcel;stdcall;
var
  Excel    : TExcelApplication;
  wSheet   : TExcelWorksheet;
begin
  try
    Excel := TExcelApplication.Create (nil);
    Excel.Connect;
    wSheet := TExcelWorksheet.Create(nil);
    wSheet.ConnectTo(Excel.WorkSheets[1] as _Worksheet);
    wSheet.Range['C1',EmptyParam].Value2 := 'Kiều Văn Mạnh';
    wSheet.Range['C1',EmptyParam].Copy(wSheet.Range['A1',EmptyParam]);
    Excel.Disconnect;
    Excel.Destroy;
    Excel.Free;
    Excel := nil;
  except
    on e: exception do
      showmessage(e.message);
  end;
end;

code của bạn dùng theo cách gọi class/component tới Excel. Cách dùng này cần khi bạn muốn tường minh hơn (chấm là có danh sách propety...), và lập trình với các sự kiện của Excel như OnSheetChange() .

Code của bạn bị thừa. Chỉ cần Excel.Free thì nó đã bso hồm Disconnect và Destroy rồi.
 
Upvote 0
Anh tuân cho em hỏi xíu, em thấy trong cửa sổ lập trình delphi một số có cái ngoặc vuông để code dễ nhìn như trong cshap không biết cái đó phải cài thêm cái gì nữa anh
 
Upvote 0
Upvote 0
Upvote 0
Delphi 10.3 chuẩn bị ra mắt với những cải tiến rất thú vị cả về ngôn ngữ lập trình và khả năng cải tiến tốc độ, nên tảng VCL tương thích tốt hơn với Windows 10 với tự động xử lý High DPI , FMX làm việc tốt hơn với Android, iOS, MacOS. Ngôn ngữ lập trình hỗ trợ "Inline" code (các bạn xem hình có một dev đang làm) và còn nhiều thứ sửa đổi nữa...
Ảnh chụp ngày 23/10/2018 từ buổi giới thiệu Delphi 10.3 tại Brazil cho gần 1000 nhà phát triển ứng dụng.
MultipleSessions.jpg


DavidKeynote.jpg


ExhibitHall.jpg


JimMcKeeth.jpg


David-with-new-Delphi-language-features.jpg
 
Upvote 0
Sao mạnh tìm kiếm tài liệu học Delphi nó toàn có chỉ tới các trang của các nước như: Nhật, Đức, Nga, Mỹ.... còn lại việt Nam sao thấy ít quá
có coi trang Delphi Việt mà thấy nghèo nàn quá

1/ Ai viết code trên Delphi 10.2 hay các bản mới nhất kể cả trên Form hay Unit thì cứ yên tâm có hack kiểu chi thì cũng chỉ coi được mỗi cái tên button chính xác thui nhé ...

Còn lại nó ra mã máy hết ... chỉ có thiên tài mới đọc được mã máy ??!

2/ Còn code trên mấy bản củ như Delphi7 vẫn coi trên Form hay Button bình thường

3/ Mạnh nay viết code Delphi tiến bộ thêm 1 chút .... May sao có thớt này Mạnh học được Delphi ... cảm ơn:D:p
 
Upvote 0
Hihihi 80% on con 20% chua ổn
ma 20% này thì mệt đây hihihihi
 
Upvote 0
Mấy hôm đọc chủ đề này Em thấy Anh kieu manh và thuyyeu99 học nhanh thật. Nhờ Anh Nguyễn Duy Tuân và các anh trong diễn đàn giúp đỡ tận tình nên cũng thích Delphi. Em là người không chuyên thấy cũng thích nhưng càng đọc thấy mình quá gà mờ.. chắc phải 10 năm..
 
Upvote 0
Các bạn cho mình hỏi 1 chút
Mình đang tập viết 1 code ADO lấy dữ liệu từ Server khi mình khai báo Password, ID luôn trong Delphi thì nó chạy tốt...

Nhưng khi mình tách ra truyền tham số Password từ Excel vào thì nó lỗi ko chạy .... Vậy mình muốn hỏi sử dụng thêm hàm gì nữa khi truyền tham số Password từ Excel vào DLL hay khai báo biến kiểu gì cho nó chạy
Xin cảm ơn

Khai báo như sau trong DLL thì nó chạy ... còn tách ra truyền tham số từ Excel vào thì nó Lỗi ?!
Mã:
var
  cnn,Rs       : OleVariant;
  ServerName   :String;
  DatabaseName :String;
  UserId       :String;
  Password     :String;

  //================
  Password := 'Kieumanh.*445513';
 
Upvote 0
Anh kieu manh có thể up dự án hoặc code cho em nghiên cứu với được không ạ (đừng mắng em nghe..hihi).
 
Upvote 0
Mấy hôm đọc chủ đề này Em thấy Anh kieu manh và thuyyeu99 học nhanh thật. Nhờ Anh Nguyễn Duy Tuân và các anh trong diễn đàn giúp đỡ tận tình nên cũng thích Delphi. Em là người không chuyên thấy cũng thích nhưng càng đọc thấy mình quá gà mờ.. chắc phải 10 năm..

Các bạn mới lần đầu học Delphi mà xem loạt bài ở topic này sẽ không học được đâu hoặc rất khó. Vì mấy cao thủ VBA đang học theo kiểu "đi tắt, đón đầu", nhảy thẳng vào những thứ khó, chứ không theo trình tự gì cả. Bạn hãy theo dõi các chủ để học Delphi kiểu step by step sẽ học đc bình thường.
 
Upvote 0
Các bạn mới lần đầu học Delphi mà xem loạt bài ở topic này sẽ không học được đâu hoặc rất khó. Vì mấy cao thủ VBA đang học theo kiểu "đi tắt, đón đầu", nhảy thẳng vào những thứ khó, chứ không theo trình tự gì cả.
Kiểu như học bơi. Buổi đầu mới học cách sải tay xong là nhẩy luôn xuống bể sâu. Cứ vùng vẫy các kiểu. Nếu ông thầy không phải ra tay cứu thì thành biết bơi. Ngày hôm qua mới quyết định học Delphi mà hôm nay đã viết DLL, server COM. :D
 
Upvote 0
Các anh cho em hỏi xíu nhé.
Hình như ADO CreateOleObject('ADODB.Recordset') nó chạy lẹ hơn AdoQuery.Connection xíu phải không ta ?.
 
Upvote 0
Các anh cho em hỏi xíu nhé.
Hình như ADO CreateOleObject('ADODB.Recordset') nó chạy lẹ hơn AdoQuery.Connection xíu phải không ta ?.

Mình không nghĩ thế. CreateOleObject('ADODB.Recordset') là làm việc với Recordset. Nếu dùng TADOQuery của Delphi thì nó là kết nối giao diện các property với Recordset, lõi lưu dữ liệu vẫn là Recordset.
 
Upvote 0
Mình không nghĩ thế. CreateOleObject('ADODB.Recordset') là làm việc với Recordset. Nếu dùng TADOQuery của Delphi thì nó là kết nối giao diện các property với Recordset, lõi lưu dữ liệu vẫn là Recordset.
Em đã chạy thử 2 cái điều đổ vào list thì thấy CreateOleObject('ADODB.Recordset') chay lẹ hơn xíu.
Tuy nhiên nếu sài TADOQuery kết hợp với DBgid thì tốt độ nó hơn rất nhiều.
Hay là em viet có gì sai sai ta ?
 
Upvote 0
Các anh cho em hỏi xíu nhé.
Hình như ADO CreateOleObject('ADODB.Recordset') nó chạy lẹ hơn AdoQuery.Connection xíu phải không ta ?.
Thử kéo dữ liệu lên 1048576 xong chạy code biết liền à
mà mạnh thấy vầy nè
1/ cũng code đó nếu lấy dữ liệu từ 1 Tablename Access lên thì chạy code nó bay cái vèo
2/ Cũng code đó thay lại cái kết nối lấy 1 sheet file đóng lên nó rất chậm ... tại sao ko biết
3/ Mạnh suy đoán vầy: Tablename Access có khoãng 10 dòng hay 1000 dòng nó nó hiểu tối đa là 1 ngàn dòng nên nhanh hơn
còn Excel cho hết nên mặc định là 1048576 dòng nên nó chậm ( hên sẻ trúng câu 3 này)
 
Upvote 0
Thử kéo dữ liệu lên 1048576 xong chạy code biết liền à
mà mạnh thấy vầy nè
1/ cũng code đó nếu lấy dữ liệu từ 1 Tablename Access lên thì chạy code nó bay cái vèo
2/ Cũng code đó thay lại cái kết nối lấy 1 sheet file đóng lên nó rất chậm ... tại sao ko biết
3/ Mạnh suy đoán vầy: Tablename Access có khoãng 10 dòng hay 1000 dòng nó nó hiểu tối đa là 1 ngàn dòng nên nhanh hơn
còn Excel cho hết nên mặc định là 1048576 dòng nên nó chậm ( hên sẻ trúng câu 3 này)
Mạnh chạy 1048576 trong bao nhieu giây


Mình đang Conect Access chứ không phải Excel
 
Upvote 0
Mạnh chạy 1048576 trong bao nhieu giây


Mình đang Conect Access chứ không phải Excel
nếu lấy dữ liệu liên tục thì nên tạo 1 lần kết nối thui .... xong khi nào thoát ứng đụng thì cả giải phóng kết nối là nó nhanh hơn 1 chút đó

Bài 332 của mạnh cái chuỗi đó xài thêm hàm gì nữa cho Delphi nó hiểu khi mình truyền tham số từ Excel vào vậy .... chỉ dùm mạnh
 
Upvote 0
nếu lấy dữ liệu liên tục thì nên tạo 1 lần kết nối thui .... xong khi nào thoát ứng đụng thì cả giải phóng kết nối là nó nhanh hơn 1 chút đó

Bài 332 của mạnh cái chuỗi đó xài thêm hàm gì nữa cho Delphi nó hiểu khi mình truyền tham số từ Excel vào vậy .... chỉ dùm mạnh
Mạnh đứa cái đoạn conect xem thử, có làm cái này bao giờ đâu
 
Upvote 0
Mạnh đứa cái đoạn conect xem thử, có làm cái này bao giờ đâu
Thử code sau của tây xem sao nhé
https://stackoverflow.com/questions...nection-variable-assignment/39670765#39670765
Mã:
function MakeDBCall( AConnection : TAdoConnection )
var
LocalConn : TAdoConn;
begin
// This creates a brand new ADO connection.
LocalConn := TAdoConnection.Create(nil);
try
// This line discards the connection you've just created,
// orphaning it (leaking the memory), and sets LocalConn
// to point to the object passed in as AConnection.
LocalConn := AConnection
///create the table and perform action using the LocalConn
finally
// This line frees AConnection, making your global variable invalid
LocalConn.free;
end;
end;
 
Upvote 0
Thử code sau của tây xem sao nhé
Các bạn cho mình hỏi 1 chút
Mình đang tập viết 1 code ADO lấy dữ liệu từ Server khi mình khai báo Password, ID luôn trong Delphi thì nó chạy tốt...

Nhưng khi mình tách ra truyền tham số Password từ Excel vào thì nó lỗi ko chạy .... Vậy mình muốn hỏi sử dụng thêm hàm gì nữa khi truyền tham số Password từ Excel vào DLL hay khai báo biến kiểu gì cho nó chạy
Xin cảm ơn

Khai báo như sau trong DLL thì nó chạy ... còn tách ra truyền tham số từ Excel vào thì nó Lỗi ?!
Mình muốn coi cái đoạn text mà mạnh kết nối ý, và cái tham số mạnh tách từ Excel kìa, chú ý coi cái tham Số truyền từ Excel phai String khong
 
Lần chỉnh sửa cuối:
Upvote 0
Mình muốn coi cái đoạn text mà mạnh kết nối ý, và cái tham số mạnh tách từ Excel kìa, chú ý coi cái tham Số truyền từ Excel phai String khong
Trong Excel minh khai báo tham số truyền vào như sau mà nó lỗi không chạy
Con viết hết vao DLL thì nó chạy ... Mình nghĩ là tham số truyền vào nó lỗi
Mã:
Sub TesSQL()
    Dim ServerName As String
    Dim DatabaseName As String
    Dim UserId As String
    Dim Password As String
  
    ServerName = "115.xx.2.xx"
    DatabaseName = "Test_KT"
    UserId = "Test_KT"
    Password = "Kieumanh.*445513"
End Sub
Chuỗi trong Delphi như sau
Mã:
cnn.ConnectionString  := 'Driver={SQL Server};Server='
        + ServerName + ';Database=' + DatabaseName
        + ';Uid=' + UserId + ';Pwd=' + Password + ';';
 
Upvote 0
Thử code sau của tây xem sao nhé
https://stackoverflow.com/questions...nection-variable-assignment/39670765#39670765
Mã:
function MakeDBCall( AConnection : TAdoConnection )
var
LocalConn : TAdoConn;
begin
// This creates a brand new ADO connection.
LocalConn := TAdoConnection.Create(nil);
try
// This line discards the connection you've just created,
// orphaning it (leaking the memory), and sets LocalConn
// to point to the object passed in as AConnection.
LocalConn := AConnection
///create the table and perform action using the LocalConn
finally
// This line frees AConnection, making your global variable invalid
LocalConn.free;
end;
end;

Đoạn code này của anh Tây này là lỗi bét nhè nhé. Có thể bạn lấy của anh tây đang hỏi bài chứ không phải câu trả lời đúng.
 
Upvote 0
Trong Excel minh khai báo tham số truyền vào như sau mà nó lỗi không chạy
Con viết hết vao DLL thì nó chạy ... Mình nghĩ là tham số truyền vào nó lỗi
Mã:
Sub TesSQL()
    Dim ServerName As String
    Dim DatabaseName As String
    Dim UserId As String
    Dim Password As String
 
    ServerName = "115.xx.2.xx"
    DatabaseName = "Test_KT"
    UserId = "Test_KT"
    Password = "Kieumanh.*445513"
End Sub
Chuỗi trong Delphi như sau
Mã:
cnn.ConnectionString  := 'Driver={SQL Server};Server='
        + ServerName + ';Database=' + DatabaseName
        + ';Uid=' + UserId + ';Pwd=' + Password + ';';

Mạnh thử cách này xem sao
ConnString : string;

ConnString := 'Driver={SQL Server};Server=%s;Database=%s;Uid=%s;Pwd=%s;';;

ServerName
Database
UserId
Password

cnn.ConnectionString := Format(ConnString,
[ServerName, Database, UserId, Password]);
 
Upvote 0
Mạnh thử cách này xem sao
ConnString : string;

ConnString := 'Driver={SQL Server};Server=%s;Database=%s;Uid=%s;Pwd=%s;';;

ServerName
Database
UserId
Password

cnn.ConnectionString := Format(ConnString,
[ServerName, Database, UserId, Password]);
Mới thử xong ko được vẫn vậy nó sai cái gì đó khi truyền tham số từ Excel vào
Còn để trong Delphi DLL thì ok
 
Upvote 0
mãnh chụp cái lỗi lên đi, mạnh gọi code tu Excel sao ?
Khai báo trong Excel như sau
Mã:
Declare PtrSafe Sub GetDataFormServer Lib "VBLibrary.dll" _
                    (ByVal ServerName As String, ByVal DatabaseName As String, _
                    ByVal UserId As String, ByVal Password As String, _
                    ByVal Target As Variant)
Chạy nó đơ Excel xong thoát luôn
 
Upvote 0
Khai báo trong Excel như sau
Mã:
Declare PtrSafe Sub GetDataFormServer Lib "VBLibrary.dll" _
                    (ByVal ServerName As String, ByVal DatabaseName As String, _
                    ByVal UserId As String, ByVal Password As String, _
                    ByVal Target As Variant)
Chạy nó đơ Excel xong thoát luôn
Manh thu cai du Const, var gióng máy bài trước chưa.
 
Upvote 0
To @thuyyeu99
Mạnh mới làm ok rồi .... quả thực nhảy xuống vực sâu vùng vẩy diết nó mới .................... lòi ra 1 con đường

Tại mình truyền cái tham số vào Delphi nó ko hiểu chi hết cuối cùng phải nhờ cái showmessage(ConnString);
xem nó nổi lên cái chi mới biết là mình làm sai :p:D
 
Upvote 0
To @thuyyeu99
Mạnh mới làm ok rồi .... quả thực nhảy xuống vực sâu vùng vẩy diết nó mới .................... lòi ra 1 con đường

Tại mình truyền cái tham số vào Delphi nó ko hiểu chi hết cuối cùng phải nhờ cái showmessage(ConnString);
xem nó nổi lên cái chi mới biết là mình làm sai :p:D
Rồi mạnh giải quyết xong chua hihihih
 
Upvote 0
Có cài SQL sever không. Nếu không cài Hướng dẫn mình cách Conect với (máy cái vụ mạng rối quá)
không cài chi hết ... bạn cho mình thông số Server đi mình test xem sao thêm chút nữa xong mình úp code cho .... nó đơn giản như viết trên Excel vậy thui mà
Nhưng cái thuở ban đầu Mình chưa hiểu hết cách khai báo cho DLL nó hiểu nên nó sai vậy thôi .... hiểu rồi thấy thường
Thông số cơ bản như sau IP Tĩnh đó nha

Mã:
Sub TesSQL()
    Dim ServerName As String
    Dim DatabaseName As String
    Dim UserId As String
    Dim Password As String
    
    ServerName = "115.xx.2.1xx"
    DatabaseName = "Test_KT"
    UserId = "Test_KT"
    Password = "Kieumanh.*445513"
    Username = "User1xx2rr"
End Sub
 
Upvote 0
không cài chi hết ... bạn cho mình thông số Server đi mình test xem sao thêm chút nữa xong mình úp code cho .... nó đơn giản như viết trên Excel vậy thui mà
Nhưng cái thuở ban đầu Mình chưa hiểu hết cách khai báo cho DLL nó hiểu nên nó sai vậy thôi .... hiểu rồi thấy thường
Thông số cơ bản như sau IP Tĩnh đó nha

Mã:
Sub TesSQL()
    Dim ServerName As String
    Dim DatabaseName As String
    Dim UserId As String
    Dim Password As String
   
    ServerName = "115.xx.2.1xx"
    DatabaseName = "Test_KT"
    UserId = "Test_KT"
    Password = "Kieumanh.*445513"
    Username = "User1xx2rr"
End Sub
minh mù tịch 2 cái
ServerName = "115.xx.2.1xx"
DatabaseName = "Test_KT"
Giả dụ mình muốn máy mình làm máy chủ thì sao
 
Upvote 0
minh mù tịch 2 cái
ServerName = "115.xx.2.1xx"
DatabaseName = "Test_KT"
Giả dụ mình muốn máy mình làm máy chủ thì sao
cái này là mịnh tịt đó nha ... mạnh chỉ nhờ cái Server của 1 người bạn test code thui nên chưa hiểu lắm khi máy cài SQL xong cấu hình nó sao đó
Cái này hỏi @Nguyễn Duy Tuân biết liền à
 
Upvote 0
cái này là mịnh tịt đó nha ... mạnh chỉ nhờ cái Server của 1 người bạn test code thui nên chưa hiểu lắm khi máy cài SQL xong cấu hình nó sao đó
Cái này hỏi @Nguyễn Duy Tuân biết liền à
Cài SQL thì chắc có thể mò ra được, nhưng không cài mới hay iihihih (Cái đó bí mật công nghệ nên chắc không được rồi)
 
Upvote 0
Mò riết gần thấy ánh sáng cuối con đường, ngũ dậy ánh sáng đó lại vụt tắt hihihihihi
 
Upvote 0
Mò riết gần thấy ánh sáng cuối con đường, ngũ dậy ánh sáng đó lại vụt tắt hihihihihi
Mạnh làm việc cả ngày với máy tính lúc thì lu xu bu lúc rất rảnh
Nghiên cứu code két diết thấy nghiện mà nó lại giúp ít cho công việc của mạnh rất nhiều

Ngày trước khi chuyển VBA qua VB6 cũng vậy ... làm quen khai báo xong viết code ầm ầm ( Nhưng VB6 nó gần gũi với VBA hơn và là con đẻ của Bác Bill nên nó dễ)

Nay chuyển qua Delphi cũng vậy nó khó gấp nhiều lần nhưng cơ bản code VBA mạnh viết tạm ok rồi nên khi chuyển qua Delphi chỉ làm quen cách khai báo và sử dụng xong thì viết tạm ok ... còn lại quậy diết ròi nó lòi ra à

Nhờ có các Bạn nay code két viết khá hơn 1 chút thấy tiến bộ hẳn lên ..... 1 năm sau là tạm ok đó
 
Lần chỉnh sửa cuối:
Upvote 0
Mạnh làm việc cả ngày với máy tính lúc thì lu xu bu lúc rất rảnh
Nghiên cứu code két diết thấy nghiệm mà nó lại giúp ít cho công việc của mạnh rất nhiều

Ngày trước khi chuyển VBA qua VB6 cũng vậy ... làm quen khai báo xong viết code ầm ầm ( Nhưng VB6 nó gần gũi với VBA hơn và là con đẻ của Bác Bill nên nó dễ)

Nay chuyển qua Delphi cũng vậy nó khó gấp nhiều lần nhưng cơ bản code VBA mạnh viết tạm ok rồi nên khi chuyển qua Delphi chỉ làm quen cách khai báo và sử dụng xong thì viết tạm ok ... còn lại quậy diết ròi nó lòi ra à

Nhờ có các Bạn nay code két viết khá hơn 1 chút thấy tiến bộ hẳn lên ..... 1 năm sau là tạm ok đó
Mạnh thì sướng rồi mih2 dang bù đầu đây hichichic,
A dạo này mih thấy có chương trình hình như để dữ liệu lên Dropbox thì phải roi kết nối
 
Upvote 0
Muốn có dữ liệu online thì có thể thuê dịch vụ, nếu muốn chỉ test chơi thì hiện có nhiều host miễn phí. Còn nếu như muốn tự trang bị cho mình thì phải có IP tĩnh, SQLServer không mua thì có thể dùng bản Express. Lựa cái máy nào đó có cấu hình được được 1 chút cài vào, mở cổng 1433, cấu hình Modem cho phép kết nối vào máy cài SQLServer, chuyện này rất dễ chứ không có khó như các bạn nghĩ.
 
Upvote 0
Cài SQL thì chắc có thể mò ra được, nhưng không cài mới hay iihihih (Cái đó bí mật công nghệ nên chắc không được rồi)

SQL Server là một hệ quản trị CSDL. Bạn phải cài nó, tạo database trên đó rồi mới kết nối tới nó từ phần mềm. Lưu ý khi cài nó hỏi quyền truy cập theo dạng nào: Windows NT hay Mix mode (đăng nhập theo user, password của SQL Server). Bạn cứ cài đi rồi chuyện kết nối tính sau.
 
Upvote 0
Mạnh thì sướng rồi mih2 dang bù đầu đây hichichic,
A dạo này mih thấy có chương trình hình như để dữ liệu lên Dropbox thì phải roi kết nối
MÌnh chưa thử nên ko biết
trước đây mình thủ xài Google Driver và OneDrive xem sao nhưng thấy lấy dữ liệu thì ok .... mà ghi lên đó nó rắc rối qua
ngay cả OneDrive ghị vào liên tục là nó báo lỗi link tinh hết

máy mạnh luôn luôn đồng bộ OneDrive và Google Driver lên mạng phòng khi máy hư hay gì đó mà lấy tài liệu
Năm ngoái quậy cmd ko biết làm sai cái chi nó xóa trắng cái ổ cứng đứng hình luôn ... biết bao công sức siêu tầm code mất hết
Bài đã được tự động gộp:

Muốn có dữ liệu online thì có thể thuê dịch vụ, nếu muốn chỉ test chơi thì hiện có nhiều host miễn phí. Còn nếu như muốn tự trang bị cho mình thì phải có IP tĩnh, SQLServer không mua thì có thể dùng bản Express. Lựa cái máy nào đó có cấu hình được được 1 chút cài vào, mở cổng 1433, cấu hình Modem cho phép kết nối vào máy cài SQLServer, chuyện này rất dễ chứ không có khó như các bạn nghĩ.
HLMT có cái Database nào trên Server mà dữ liệu chỉ dùng học tập và test code cho Mạnh nhờ chạy test code ADO xem nó có lấy được dữ liệu ko 1 chút .... mấy ngày nay mò thấy tạm ok .... muốn test Server cái khác xem sao
 
Lần chỉnh sửa cuối:
Upvote 0
SQL Server là một hệ quản trị CSDL. Bạn phải cài nó, tạo database trên đó rồi mới kết nối tới nó từ phần mềm. Lưu ý khi cài nó hỏi quyền truy cập theo dạng nào: Windows NT hay Mix mode (đăng nhập theo user, password của SQL Server). Bạn cứ cài đi rồi chuyện kết nối tính sau.
Cái SQL Server em cài và sài thử rồi mà chỉ kết nối máy em thôi chưa biết cách kết nối từ xa hichic
 
Upvote 0
Cái SQL Server em cài và sài thử rồi mà chỉ kết nối máy em thôi chưa biết cách kết nối từ xa hichic

Để kết nối tới SQL Server từ các máy tính (môi trường Client) , nếu không dùng component đặc biệt nào, dùng ADO thì bạn cần caì SQL Server ODBC Drive (thông thường Windows đã cài sẵn). Bạn có thể tải và cài đặt ở đây
https://www.microsoft.com/en-us/download/details.aspx?id=53339

Từ môi trường VBA hay Delphi bạn dùng ADO khai báo ConnectionString cho nó.
Khai báo ConnectionString với 2 cấu trúc tùy thuộc vào cài đặt SQL Server dạng nào:

1. Nếu SQL Server cài dạng Windows NT
ADOConnection1.ConnectionString := "Server=myServerName\myInstanceName;Database=myDataBase;Trusted_Connection=True;";

(Dạng này không cần user và password - không bảo mật!)

2. Nếu SQL Server cài dạng Mix Mode (phải khai báo user, Password
ADOConnection1.ConnectionString := "Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername; Password=myPassword; ";

Chế độ ngầm định:
+ myInstanceName thường là "SQLEXPRESS" (nếu cài bản SQL Server Express)
+ User Id là "sa"
+ Password để trống
Ví dụ:
ADOConnection1.ConnectionString := "Server=192.168.100.5\SQLEXPRESS;Database=CSDL của bạn; User Id=sa; Password=; ";

(*) Lưu ý: các kết nối trên là bạn kết nối trong mạng LAN
(*) Nếu kết nối qua internet thì phải mở Port: 1433 (ngầm định khi cài đặt). IP máy chủ phải dùng IP của modem (ngồi tại máy cùng mạng với máy chủ vào Google gõ "MyIP).
 
Upvote 0
Gửi các bạn đang quan tâm đến lập trình Delphi. Tôi đã tạo 2 video hướng dẫn lập trình Delphi cơ bản. Chuỗi video này giúp các bạn có kiến thức căn bản, từng bài học giúp các bạn tiếp cận ngôn ngữ này một cách có hệ thống, dễ học nhất có thể.
Link bài giảng tại đây:
https://www.giaiphapexcel.com/diend...-trình-delphi-cơ-bản-từ-bluesofts-net.138736/
 
Upvote 0
Em có viết 1 câu SQL trong Delphi như sau
Mã:
    sSQL1 := 'SELECT DISTINCT a.MaHS AS HS, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and Left(b.MaCT,1)="A" or b.MaHS=a.MaHS and Left(b.MaCT,1)="B") AS AB, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="II") AS II, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="III") AS III, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="IV") AS IV, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="V") AS V, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="VI") AS VI, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="VII") AS VII, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and Not b.MaCT="VIII") AS SoTien, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="VIII") AS VIII, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS) AS TongSoTien '+
    'FROM DMHS AS a Group by a.MaHS';
mà sao em thấy nó chạy chậm quá không biết có sai chỗ nào, mong các anh chị hướng dẫn với ah
 
Upvote 0
Em có viết 1 câu SQL trong Delphi như sau
Mã:
    sSQL1 := 'SELECT DISTINCT a.MaHS AS HS, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and Left(b.MaCT,1)="A" or b.MaHS=a.MaHS and Left(b.MaCT,1)="B") AS AB, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="II") AS II, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="III") AS III, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="IV") AS IV, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="V") AS V, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="VI") AS VI, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="VII") AS VII, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and Not b.MaCT="VIII") AS SoTien, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS and b.MaCT="VIII") AS VIII, '+
    '(SELECT SUM(ThanhTien) FROM Data b WHERE b.MaHS=a.MaHS) AS TongSoTien '+
    'FROM DMHS AS a Group by a.MaHS';
mà sao em thấy nó chạy chậm quá không biết có sai chỗ nào, mong các anh chị hướng dẫn với ah

Tốc độ chậm này là do cách bạn làm SQL không đúng cách. Lỗi này thì chạy trên đâu cũng chậm.

Câu SQL bạn cần viết lại là:

SELECT a.MaHS AS HS, SUM(IIF(b.MaCT="II", b.THANHTIEN,0)) AS II,...SUM(IIF(...
FROM DMHS a INNER JOIN DATA b ON a.MaHS=b.MaHS
GROUP BY a.MaHS

Bạn sửa lệnh SQL như của mình là nhanh gơn gấp 100 lần đấy :).

Tóm lại, một phần mềm quản trị dữ liệu chạy nhanh đến từ các yếu tố:
1. Kiến thức dùng SQL - Đây là một loại kiến thức CSDL không liên quan đến ngôn ngữ lập trình, mỗi loại CSDL thì SQL sẽ có một chút đặc điểm khác nhau. Ví dụ MySQL dùng hàm IF, Access, Excel, SQL Server thì là IIF,...
Dùng SQL chỉ nên dùng SELECT lồng SELECT khi cần SELECT con nằm sau FROM. Nếu SELECT nằm trong khu vực của SELECT mẹ thì rất chậm - tối kỵ dùng như thế.
2. Thuật toán
3. Ngôn ngữ lập trình
 
Upvote 0
Tốc độ chậm này là do cách bạn làm SQL không đúng cách. Lỗi này thì chạy trên đâu cũng chậm.

Câu SQL bạn cần viết lại là:

SELECT a.MaHS AS HS, SUM(IIF(b.MaCT="II", b.THANHTIEN,0)) AS II,...SUM(IIF(...
FROM DMHS a INNER JOIN DATA b ON a.MaHS=b.MaHS
GROUP BY a.MaHS

Bạn sửa lệnh SQL như của mình là nhanh gơn gấp 100 lần đấy :).

Tóm lại, một phần mềm quản trị dữ liệu chạy nhanh đến từ các yếu tố:
1. Kiến thức dùng SQL - Đây là một loại kiến thức CSDL không liên quan đến ngôn ngữ lập trình, mỗi loại CSDL thì SQL sẽ có một chút đặc điểm khác nhau. Ví dụ MySQL dùng hàm IF, Access, Excel, SQL Server thì là IIF,...
Dùng SQL chỉ nên dùng SELECT lồng SELECT khi cần SELECT con nằm sau FROM. Nếu SELECT nằm trong khu vực của SELECT mẹ thì rất chậm - tối kỵ dùng như thế.
2. Thuật toán
3. Ngôn ngữ lập trình
Cám ơn anh nhiều
 
Upvote 0
MÌnh đang viết 1 Hàm lưu dữ liệu vào DataBase.accdb sử dụng câu Qry sau ko viết cấu trúc nó sai cái gì mong các Bạn chỉ dùm
Mã:
Qry := ' INSERT INTO ' + TableName + ' VALUES(' + x + ')';
 
Upvote 0
MÌnh đang viết 1 Hàm lưu dữ liệu vào DataBase.accdb sử dụng câu Qry sau ko viết cấu trúc nó sai cái gì mong các Bạn chỉ dùm
Mã:
Qry := ' INSERT INTO ' + TableName + ' VALUES(' + x + ')';
sSQL := 'Insert Into DMHS(MaHS, HoVaTen) ' + 'Values(' +
QuotedStr((trim(Edit2.Text)))
Bài đã được tự động gộp:

Tốc độ chậm này là do cách bạn làm SQL không đúng cách. Lỗi này thì chạy trên đâu cũng chậm.

Câu SQL bạn cần viết lại là:

SELECT a.MaHS AS HS, SUM(IIF(b.MaCT="II", b.THANHTIEN,0)) AS II,...SUM(IIF(...
FROM DMHS a INNER JOIN DATA b ON a.MaHS=b.MaHS
GROUP BY a.MaHS

Bạn sửa lệnh SQL như của mình là nhanh gơn gấp 100 lần đấy :).

Tóm lại, một phần mềm quản trị dữ liệu chạy nhanh đến từ các yếu tố:
1. Kiến thức dùng SQL - Đây là một loại kiến thức CSDL không liên quan đến ngôn ngữ lập trình, mỗi loại CSDL thì SQL sẽ có một chút đặc điểm khác nhau. Ví dụ MySQL dùng hàm IF, Access, Excel, SQL Server thì là IIF,...
Dùng SQL chỉ nên dùng SELECT lồng SELECT khi cần SELECT con nằm sau FROM. Nếu SELECT nằm trong khu vực của SELECT mẹ thì rất chậm - tối kỵ dùng như thế.
2. Thuật toán
3. Ngôn ngữ lập trình
Anh cho em hoi them chút nhé, cũng là Câu SQL trên trong bang data co cột Dot.
ví dụ table data

MaHS---II---Dot
--T1--- 2--- 1
--T1--- 3--- 1
--T1--- 4--- 2

Em muốn lồng vào câu SQL ở trên để thêm cột Dots được kết quả như sau:
MaHS---II---Dot
--T1--- 9--- 1&2

không biết được không
 
Lần chỉnh sửa cuối:
Upvote 0
sSQL := 'Insert Into DMHS(MaHS, HoVaTen) ' + 'Values(' +
QuotedStr((trim(Edit2.Text)))
Bài đã được tự động gộp:
Cái hàm QuotedStr lợi hại thật .... ko có nó mò chưa biết khi nào
Mạnh viết 1 Hàm bao quát nhất lưu dữ liệu Format linh tinh vào TableName Access nên phải xài DAO ... Insert Into nó mới xử được
còn ADO chưa thử ko biết có ok không nữa ???!!!

Xong hết ròi chạy nhanh lắm bay vèo vèo :p:D
Thanks bạn
 
Lần chỉnh sửa cuối:
Upvote 0
Mạnh có rành SQL giải giúp mình câu hỏi trên với hichic
Ko rành kiểu đó lao vô đầu U mấy cục đó ....
ADO thì Mạnh chỉ cần biết như sau:
1/ Tạo kết nối với các CSDL
2/ Lấy lên và ghi xuống
3/ Lấy dữ liệu vào Mảng xong tính toán linh tinh trong đó ... còn tính toán thuần ADO là thua .... ko dại gì trình kém mà lao vô đó ... chết chắc
 
Upvote 0
Ko rành kiểu đó lao vô đầu U mấy cục đó ....
ADO thì Mạnh chỉ cần biết như sau:
1/ Tạo kết nối với các CSDL
2/ Lấy lên và ghi xuống
3/ Lấy dữ liệu vào Mảng xong tính toán linh tinh trong đó ... còn tính toán thuần ADO là thua .... ko dại gì trình kém mà lao vô đó ... chết chắc
Ủa chú manh lam ADO con nect dữ liệu không thống kê hả
 
Upvote 0
Upvote 0
Câu hỏi trên đưa vô mãng thì mình xử lý được nhưng muốn gôm vô câu SQL cho nó tiện ý mà.
Cái này trên GPE có mấy thành viên rành nó ... cách tốt nhất bạn viết trên VBA hỏi xong ... nhìn xem thuật toán người ta làm mà chuyển vô Delphi
Mình chuyển gần hết Mã nguồn từ VB6 vào delphi rồi ... còn khoãng 10 + n câu hỏi nữa làm kẹt tới đâu hỏi tới đó ???

Còn bạn hỏi = Delphi thì trên GPE này mấy ai biết mô mà giúp .... ngay tới tham gia thớt này hay thớt Mầm, trồi lá kia mới lập mấy ngày đó mà có ai tham gia mô -0-0-0-:bounce:===\.
 
Upvote 0
sSQL := 'Insert Into DMHS(MaHS, HoVaTen) ' + 'Values(' +
QuotedStr((trim(Edit2.Text)))
Bài đã được tự động gộp:


Anh cho em hoi them chút nhé, cũng là Câu SQL trên trong bang data co cột Dot.
ví dụ table data

MaHS---II---Dot
--T1--- 2--- 1
--T1--- 3--- 1
--T1--- 4--- 2

Em muốn lồng vào câu SQL ở trên để thêm cột Dots được kết quả như sau:
MaHS---II---Dot
--T1--- 9--- 1&2

không biết được không
Thử như sau nhé:

1541388956253.png
 
Upvote 0
sSQL := 'Insert Into DMHS(MaHS, HoVaTen) ' + 'Values(' +
QuotedStr((trim(Edit2.Text)))
Bài đã được tự động gộp:


Anh cho em hoi them chút nhé, cũng là Câu SQL trên trong bang data co cột Dot.
ví dụ table data

MaHS---II---Dot
--T1--- 2--- 1
--T1--- 3--- 1
--T1--- 4--- 2

Em muốn lồng vào câu SQL ở trên để thêm cột Dots được kết quả như sau:
MaHS---II---Dot
--T1--- 9--- 1&2


không biết được không

Nếu là CSDL Excel thì phải đợi Add-in A-Tools 2019 bổ sung tính năng group và liệt kê cho ngôn ngữ SQL trong Excel. Còn ADO với Excel thuần túy không thể làm được.

Đây là video test tính anwng tổng hợp và liệt kê của A-Tools
 
Upvote 0
Upvote 0
Upvote 0
Upvote 0
Upvote 0
ĐÚng rồi, ý mình là vậy. Khả năng chạy được SQL đến mức độ nào là quyết định bởi loại CSDL. ADO chỉ là phương tiện truyền dẫn.
hic potay dot trước em cung dung Case When tuong là nó thay cho iif ma có biết nó là của SQL sever đâu, Cái này mình viết hàm đưa vô câu SQL được không anh ?
 
Upvote 0

SQL Server không có hàm chuyên làm kiểu liệt kê nhỉ? Nếu dùng SELECT trong SELECT tốc độ chạy sẽ rất chậm! Nếu như kết quả SELECT mẹ lấy ra 1000 dòng thì SELECT con phải chay 1000 lần => Chậm. Giải thuật CSDL là chỉ chạy 1 lần thì tốc độ mới nhanh như group_concat.
Bài đã được tự động gộp:

hic potay dot trước em cung dung Case When tuong là nó thay cho iif ma có biết nó là của SQL sever đâu, Cái này mình viết hàm đưa vô câu SQL được không anh ?

Nếu CSDL Access, SQL Server, MySQL,... thì viế đươc hàm. Còn Nếu là Excel thì phải dùng với Add-in A-Tools cho phép viết hàm VBA lồng vào.
 
Upvote 0
SQL Server không có hàm chuyên làm kiểu liệt kê nhỉ? Nếu dùng SELECT trong SELECT tốc độ chạy sẽ rất chậm! Nếu như kết quả SELECT mẹ lấy ra 1000 dòng thì SELECT con phải chay 1000 lần => Chậm. Giải thuật CSDL là chỉ chạy 1 lần thì tốc độ mới nhanh như group_concat.
Bài đã được tự động gộp:



Nếu CSDL Access, SQL Server, MySQL,... thì viế đươc hàm. Còn Nếu là Excel thì phải dùng với Add-in A-Tools cho phép viết hàm VBA lồng vào.

À, phải nói rõ thêm là là nếu CSDL là Access thì phải viết hàm trong Microsoft Access nhé, chứ không phải từ Delphi :).
 
Upvote 0
À, phải nói rõ thêm là là nếu CSDL là Access thì phải viết hàm trong Microsoft Access nhé, chứ không phải từ Delphi :).
Còn nếu mình đếm không trùng bên Fiels Dợt của Table 2 được không ah

Cái điệu này chắc phải Connect rồi xử lý trên Recordset rồi mới đỗ dữ liệu vào List quá. Cám ơn các anh rất nhiều
 
Upvote 0
Còn nếu mình đếm không trùng bên Fiels Dợt của Table 2 được không ah

Cái điệu này chắc phải Connect rồi xử lý trên Recordset rồi mới đỗ dữ liệu vào List quá. Cám ơn các anh rất nhiều

Nếu csdl là MySQL thì được nhé. Câu lệnh khi đó là
SELECT f1, sum(f2), count(distinct f3) FROM ...
 
Upvote 0
To @thuyyeu99

Bạn có cái list Hàm dạng như sau cho Mình xin với ... hay trang nào có List đó cũng được ... Mình mới tập code Delphi nhiều khi kẹt mấy cái hàm xử lý đó lắm

QuotedStr
IntToStr

Mình có tìm thấy File list Function mà sao Tìm cái Hàm QuotedStr ko thấy có là sao ta ?!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
To @thuyyeu99

Bạn có cái list Hàm dạng như sau cho Mình xin với ... hay trang nào có List đó cũng được ... Mình mới tập code Delphi nhiều khi kẹt mấy cái hàm xử lý đó lắm

QuotedStr
IntToStr

Mình có tìm thấy File list Function mà sao Tìm cái Hàm QuotedStr ko thấy có là sao ta ?!

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.QuotedStr
http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.IntToStr
 
Upvote 0
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
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
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom