Como llamar un reporte que tiene un sub-reporte

Trabajo con Visual Studio 2019, SQL Server 2014, Windows Forms, Crystal Reports 8.5

Estoy trabajando con reportes en el cual no había tenido problemas en llamar a un reporte, salvo este escenario en el cual tengo un reporte que dentro tiene un sub reporte. El problema es que no se como llamar a un reporte que tiene un sub reporte, muestro como lo estoy llamando.

private void MostrarReporte()     {         var cn = new ConnectionInfo()         {             ServerName = ".",             DatabaseName = "Business",             UserID = "xxx",             Password = "xxx",             Type = ConnectionInfoType.SQL         };          //SubReporte         var filePathD = @"D:\ReportesPrueba\DenominacionTotal.rpt";         _rptListaDenominacion.Load(filePathD);         var recuentoDenominacion = _saRecuento.MostrarRecuentoDenominacion(_operacionId);         _rptListaDenominacion.SetDataSource(recuentoDenominacion);         var frmD = new FrmReportes();         frmD.CrystalReportViewer.ReportSource = _rptListaDenominacion;         SetDbLogonForReport(cn, _rptListaDenominacion);         frmD.CrystalReportViewer.Refresh();           //Reporte principal         var filePath = @"D:\ReportesPrueba\CierreCaja.rpt";         _rptListaCierreCaja.Load(filePath);         var cierreCaja = _saRecuento.MostrarCierreCaja(_operacionId, _puntoEmisionId);         _rptListaCierreCaja.SetDataSource(cierreCaja);         var frm = new FrmReportes();         frm.CrystalReportViewer.ReportSource = _rptListaCierreCaja;            SetDbLogonForReport(cn, _rptListaCierreCaja);         frm.CrystalReportViewer.Refresh();         frm.Show();         Application.DoEvents();     } 

Lo que hago es primero poblar de información el primer reporte y después pueblo de información al reporte principal, estoy usando un Report Viewer, ¿en que me estoy equivocando?

Saludos!!!

Usar PDO también tiene riesgos de inyección SQL?

Me gustaría saber si usando el siguiente ejemplo para realizar consultas SQL también tiene riesgos de inyección SQL:

$  db = new \PDO('mysql:dbname=***;host=***;charset=utf8mb4', '***', '***'); $  sql = "INSERT INTO `tabla` (`nombre`, `descripcion`) VALUES (?, ?)"; $  stmt= $  db->prepare($  sql); $  stmt->execute([$  nombre, $  descripcion]); 

Hasta estos momentos la validación que tengo sobre los campos permite todo tipo de caracteres, y se podría enviar esto perfectamente: '; DROP TABLE tabla

Lo que me gustaría saber, es si algo como eso tendría efecto y si debo preocuparme. Gracias

Como puedo extraer los datos de un jsonArray que dentro de ella tiene otro Array? – Android Studio

en mi clase php estoy generando el siguiente array (corrijanme si esta mal):

http_response_code(200); $  dato = $  this->clase_cliente->obtenerDatos($  this->correo_electronico); $  jsonDatosUsuario['DatosUsuario'][] = array('nombre'=> $  dato['nombre'], 'apellido'=> $  dato['apellido'], 'correo_electronico'=> $  dato['correo_electronico'], 'foto_perfil'=> $  dato['foto_perfil']); $  jsonResponse['response'][] = array('TagResponse' => 'DatosObtenidos', 'Datos' => $  jsonDatosUsuario); echo(json_encode($  jsonResponse)); 

Y como resultado obtengo el siguiente JsonArray:

{"response":            [{"TagResponse":"DatosObtenidos",                    "Datos":{"DatosUsuario":[{"nombre":"Juan","apellido":"Lopez","correo_electronico":"juanlopez@gmail.com","foto_perfil":null}]}}]} 

Y en mi clase java tengo lo siguiente:

@Override public void onResponse(String response) {     if(response != null){         try {             jsonObject = new JSONObject(response);             jsonArray = jsonObject.getJSONArray("response");             object = jsonArray.getJSONObject(0);             if(object.getString("TagResponse").equals("DatosObtenidos")){                 jsonArray = jsonObject.getJSONArray("Datos");                 object = jsonArray.getJSONObject(1);                 for(int i = 0; i < jsonArray.length(); i++){                     object = jsonArray.getJSONObject(i);                 }             }else{              }         } catch (JSONException e) {             errorVolley.errorListener("Exception");             e.printStackTrace();         }     } 

Lo que trato de hacer es de que una vez recibido el Json se analize el TagResponse, si el TagResponse tiene un valor de DatosObtenidos quiere decir que los datos del usuario se obtuvieron correctamente y que puedo proseguir a obtener los datos que se encuentran dentro del Json: DatosUsuario, en mi clase java solo logre verificar si el TagResponse es igual a DatosObtenidos luego despues de eso ya no se como puedo acceder a leer y extraer los datos del usuario, alguien porfavor que me ayude.

¿Cómo incluir una condicional en el WHERE solo si un JOIN tiene algo?

necesito ayuda para realizar el siguiente query en MySQL, estoy juntando dos tablas con un LEFT JOIN para arrojar resultados en caso de que la segunda tabla no contenga información.

SELECT   e.emp_id AS "empresa_id",   et.idioma_id AS "idioma" FROM empresa as e LEFT JOIN empresa_translate as et   on et.emp_id = e.emp_id WHERE   replace(replace(e.emp_nombre,'z','s'),'h','')   LIKE replace(replace('%NOMBRE%','z','s'),'h',''); 

Esto obtiene los resultados sin importar que la tabla empresa_translate tenga algún registro asociado con el id, sin embargo necesito implementar la siguiente lógica a lo que ya tengo.

Si es que existe algún registro en la tabla empresa_translate asociado a este id filtra los resultados para mostrar sólo los que tengan un et.idioma_id = 1.

SELECT   e.emp_id AS "empresa_id",   et.idioma_id AS "idioma" FROM empresa as e LEFT JOIN empresa_translate as et   on et.emp_id = e.emp_id WHERE   replace(replace(e.emp_nombre,'z','s'),'h','')   LIKE replace(replace('%NOMBRE%','z','s'),'h','')   AND et.idioma_id = 1; 

El problema de hacerlo de esta manera es que no arroja ningún resultado. ¿Cuál es la manera correcta de hacer esto?

Buscar registro en una tabla del mismo nombre en varias bdd y obtener el nombre de la bdd que tiene el registro

Estoy intentando buscar un registro en una tabla del mismo nombre en varias bdd y obtener el nombre de la bdd que tiene el registro.

Por ejemplo: la tabla “Persona” está en la bdd sucursal1, en la bdd sucursal2, … y en la bdd sucursal30. El registro que busco es en el campo “Identificacion” de la tabla “persona” que se encuentra en 30 bases de datos diferentes. Cómo obtengo el nombre de la bdd donde se encuentra el registro “1002568742”?

Aplicar una clase a un input si tiene texto dentro

Tengo un formulario, en el cual los input text tienen unas clases para que el placeholder una vez se tiene seleccionado el input text pase a ser un label, el problema es que una vez deja de estar seleccionado este pasa de nuevo a su lugar, sin importar si tiene texto dentro lo cual queda muy mal. Eso se hace con la clase “nk-toggled” que se aplica cuando está seleccionado el input text, en teoría está en el código pero no sé porque no funciona.

Así se ve normal Así se ve normal

Así cuando tiene el focus Así cuando tiene el focus

Así cuando pierde el focus y sigue con texto adentro Así cuando pierde el focus y sigue con texto adentro

El código javascript para eso es el siguiente:

$  (".nk-int-st")[0] && ($  ("body").on("focus", ".nk-int-st .form-control", function() {             $  (this).closest(".nk-int-st").addClass("nk-toggled")         }), $  ("body").on("blur", ".form-control", function() {             var p = $  (this).closest(".form-group, .input-group"),                 i = p.find(".form-control").val();             p.hasClass("fg-float") ? 0 == i.length && $  (this).closest(".nk-int-st").removeClass("nk-toggled") : $  (this).closest(".nk-int-st").removeClass("nk-toggled")         })), $  (".fg-float")[0] && $  (".fg-float .form-control").each(function() {             var i = $  (this).val();             0 == !i.length && $  (this).closest(".nk-int-st").addClass("nk-toggled")         }); 

System.FormatException: La cadena de entrada no tiene el formato correcto

Al compilar mi programa me muestra esta excepción: System.FormatException: La cadena de entrada no tiene el formato correcto.’

public static int A = 0;  List<string> lista1 = new List<string>();   A = int.Parse(lista1[1]);(la excepción aparece en esta linea ) 

la lista es de tipo string por ello lo quiero convertir y la variable A que esta afuera del método.

no veo la diferencia entre las 2 sentencias y la mia tiene error y la del profesor no

Buenas tengo un ejercicio de sql uso sqldevelop y yo veo mi sentencia igual a la del profesor pero a mi me da error y a el no

DECLARE     cursor curs(argumento number) IS     SELECT * FROM temple where numen=argumento for update of salar;     registro curs%rowtype;  begin     OPEN curs(&Numero_empleado);     FETCH curs INTO registro;     UPDATE temple SET salar=salar*1.1 WHERE CURRENT OF curs;     CLOSE curs; END; 

este es el link del scrip por si lo quereis probar https://www.dropbox.com/s/2v4jgswdp4ux8bd/CreaTrasCor.SQL?dl=0

Informe de error - ORA-06550: line 3, column 32: PL/SQL: ORA-00904: "NUMEN": invalid identifier ORA-06550: line 3, column 5: PL/SQL: SQL Statement ignored ORA-06550: line 2, column 12: PLS-00341: declaration of cursor 'CURS' is incomplete or malformed ORA-06550: line 4, column 14: PL/SQL: Item ignored ORA-06550: line 7, column 18: PLS-00320: the declaration of the type of this expression is incomplete or malformed ORA-06550: line 7, column 2: PL/SQL: SQL Statement ignored 06550. 00000 -  "line %s, column %s:\n%s" *Cause:    Usually a PL/SQL compilation error. 

Insertar un coeficiente nuevo para que se sume al que tiene el mismo grado

Tengo un codigo que requiere lo siguiente: -Necesita insertar polinomios, primero el coeficiente y despues el grado. -Mostrar los elementos de la lista -Insertar un coeficiente nuevo y sumarlo al que tenga el mismo grado, ejemplo: inserto primero coeficiente 1 y despues grado 2, se muestra como “+1x^2”, y al insertar uno nuevo, debe ser, coeficiente 1 y grado 2 para que cuando se muestre sea “+2x^2” Entonces este ultimo punto me genera problema, ya que no sabria como hacerlo, dejo el codigo que tengo hecho.

Main.cpp

#include <cstdlib> using namespace std; #include "menu.h"  int main() {     int opcion=0;     do {         opcion = menu();         ejecutaOpcionElegida(opcion);     } while (opcion != 3);      return 0; }

Nodo.h

#ifndef NODO #define NODO class Nodo{ public: 	int coeficiente; 	int grado; 	Nodo *next;  }; #endif

Polinomio.h

#ifndef POLINOMIO #define POLINOMIO #include "Nodo.h" #include <iostream> #include <iomanip> #include <string.h>      using namespace std; class Polinomio { public: 	Nodo *cabeza; 	 	void add(int coeficiente, int grado) { 		Nodo *nuevo = new Nodo(); 		nuevo->next = NULL; 		nuevo->coeficiente = coeficiente; 		nuevo->grado = grado; 		if (cabeza==NULL) { 			cabeza = nuevo; 		} else { 			Nodo *actual = cabeza; 			while(actual->next!=NULL) { 				actual = actual->next; 			} 			actual->next = nuevo; 		} 	} 	 	void print() { 		Nodo *actual = cabeza; 		while(actual!= NULL){ 			cout<<"+"<<actual->coeficiente<<"x";  			cout<<fixed<<setprecision(2); 			cout<<"^"<<actual->grado; 			actual = actual->next;  		} 		cout<<endl;  	} 	 	 }; #endif

menu.h

#ifndef MENU_H #define MENU_H #include <iostream> #include <string> using namespace std; #include "Polinomio.h" Polinomio *lista = new Polinomio(); void mostrar();  int menu() {     int opcionElegida = 0;     do {         cout << "1) Agregar termino" << endl;         cout << "2) Mostrar polinomio" << endl;         cout << "3) Salir" << endl;         cout << "Opcion:" << endl;         cin>>opcionElegida;         if (opcionElegida <= 0 || opcionElegida > 3) {             cout << "\tOpcion invalida" << endl;         } else {             break;         }      } while (true);     cin.ignore(1000, '\n');     return opcionElegida; }   void AgregarPolinomio() {   	int a;   	int b;     cout<<"Coeficiente:"<<endl;     cin>>a;     cout<<"Grado:"<<endl;     cin>>b;    lista->add(a,b); }  void mostrar() {     lista->print(); } void ejecutaOpcionElegida(int opcion) {     switch (opcion) {         case 1:             AgregarPolinomio();             break;         case 2:             mostrar();             break;         case 3:             exit(0);             break;         default:              break;       } }   #endif